導航:首頁 > 程序命令 > getopt命令

getopt命令

發布時間:2022-08-02 23:58:12

Ⅰ shell對於用戶輸入的命令行如何進行處理

linux shell 處理用戶輸入

Ⅱ shell 腳本中getopt 和 getopts 的區別

1)getopts 是bash的內置命令,用命令help getopts查看其幫助。

2)getopt是外部命令,用命令which getopt查看其安裝的位置,例如:
$ which getopt
/usr/bin/getopt
用getopt --help或者getopt -h查看簡要幫助
或者用man getopt查看詳細幫助(按空格顯示下一頁,按q退出)。

以上是簡潔回答,僅供參考,謝謝!

Ⅲ 高手求教!!!c語言中怎樣讀取命令行參數

把main函數聲明為int main(int argc,char *argv[])
argc 是參數的個數
如:
int main(int argc,char *argv[])
{
printf("%s",argv[1]);
}
這是一個簡單的未做錯誤判斷的echo函數,將上面的源程序編譯連接為echo.exe,然後在命令提示符下輸入echo hello
這樣,argc=2,argv[0]為echo,argv[1]為hello

我沒用過linux,不知道上面的回答有沒有對上意思。

Ⅳ linux中設計一個shell腳本程序可以接受命令行輸入的參數執行相應的菜單命令

echo "------------------------"
echo "1、命令1"
echo "2、命令2"
echo "3、命令3"
echo "------------------------"
echo "請輸入要執行的菜單命令(1/2/3):"
read com
case $com in
1)
命令1
;;
2)
命令2
;;
3)
命令3
;;
*)
echo "輸入命令錯誤"
;;

python中的 getopt有什麼作用呢

用來處理命令行參數的,比如你開發一個小工具,都要寫一個 使用幫助吧,就用這個。

Ⅵ 如何讓getopt的某個選項能處理多個參數

getopt是默認的處理命令行選項的lib 建議你在python腳本首行增加類似這樣的#!/usr/bin/python 標記

Ⅶ badboy腳本中,迭代時多個參數的值如何同時變化

之所以用到命令行參數,關鍵在於shell腳本需要與運行腳本的人員進行交互。

bash shell提供了命令行參數添加在命令後面的數據值)、命令行選項修改命令行為的單字元值)和直接讀取鍵盤輸入。

1、命令行參數

向shell腳本傳遞數據的最基本方式是使用命令行參數。

1)讀取參數

讀取輸入的參數的變數為位置參數,位置參數通過標准數字表示,

其中$0為程序名稱,$1為第一個參數,$2為第二個參數,依次類推,直到$9為第九個參數。

shell腳本自動將命令行參數賦值給各個位置變數。

同時輸入多個參數可以是數值也可以是字元串)時,必須使用空格分隔要想在參數值中包含空格,就必須使用單引號或雙引號)

當參數多於9個後,必須在shell腳本內使用大括弧將變數括起來,如${10}。從而可以使用任意個參數。

2)讀取程序名稱

傳遞給變數$0的字元串實際上是程序的路徑根據調用方法決定是相對還是絕對路徑)。

使用basename命令可以去掉路徑前綴,只獲得程序名稱名字中不 可以有空格)。

3)測試腳本

當腳本認為應該包含參數,卻實際上沒有數據時,就會出錯。

好的方法是對參數進行檢查來保證使用參數前確實存在數據,可以使用-n參數來檢查。

例子:if [ –n 「$1」 ] then .. else .. fi

2、特殊的參數變數

用於跟蹤命令行參數

1)參數計數

使用特殊變數$#測試執行腳本時包含的命令行參數個數。腳本中任何位置都可以 使用$#

例子:if [ $# –ne 2 ] 即可測試參數個數

可以使用${!#}來返回最後一個命令行參數當無參數時,$#為0,而${!#}為程序名)

2)獲取所有數據

變數$*將命令行中提供的所有參數作為一個單詞處理,它將多個參數看成 一個參數。

變數$@將命令行中提供的所有參數作為同一個字元串中的多個單詞處理。 允許對其中的值進行迭代一般使用for),分隔開不同參數

3、移位

shift命令能夠改變命令行參數的相對位置。默 認將每個參數變數左移一個位置變數$0不變,把$1丟棄,注意不可以恢復了!)

在不清楚參數數目情況下,這是一個迭代參數的好辦法。

可以為shift提供一個參數,來實現多位移變化。

4、處理選項

選項是由破折號引導的單個字母,用於更改命令的行為。

1,找出選項

1)處理簡單選項

可以使用處理命令行參數相同的方法處理選項,抽取時使用case語句進行判斷是否符合選項格式。

2)從參數中分離選項

同時使用選項和參數時,可以使用--指示選項列表的結束。發現--後,shell就知道後面的是普通參數了,停止使用case處理選項。

3)處理帶值的選項

選項後緊跟參數值,一種方法是在case中對應選項後使用shift和讀後一位參數的方法處理。更好的方法如 下:

2,使用getopt命令

getopt命令在處理選項和參數時非常方便。它對參數進行重新組 織,以便於解析

1)命令格式

getopt可以接受任意形式的選項和參數列表,並自動將它們轉換為適當的格式。

命令格式為: getopt options optstring parameters

選項字元串(opstring)用於定義命令行中的有效選項字母,以及哪些選項字母需要參數值。

2)腳本中使用getopt

需要使用set命令將現有的命令行選項和參數替換為getopt命令生成的 格式化形式。

需要將原始腳本命令行參數送給getopt命令,然後將getopt命令輸出送給set命令,如下:set – `getopts –q ab:cd 「$@」`

但是getopt命令不能很好的處理帶有空格的參數值,它將空格解析為參數分隔符,而不是將雙引號引起來的兩個 值合並成一個參數。解決辦法如下:

3)更高級的getopts命令

getopts命令順序的對現有的shell參數變數進行處理,每調用一次,只處理命令中檢測到的參數中的一個。處理完所有參數後,以大於0的退出 狀態退出。

非常適宜於在循環中解析所有命令行參數

格式為: getopts optstring variable

$optarg包含需要參數值的選項要使用的值,$optind包含getopts停止處理時在參數列表中的位置。

Ⅷ python中的from getopt import getopt有什麼作用呢

from getopt import getopt就是從getopt包里導入getopt模塊,也可以直接import getopt,getopt主要是python用來獲取命令行參數用的,如:python test.py -y 23,你需要傳一個參數y是就可以用getopt

importgetopt,sys
try:
opts,args=getopt.getopt(sys.argv[1:],"ho:",["help","y="])
exceptgetopt.GetoptError:
#printhelpinformationandexit:

具體可以參考下API文檔

Ⅸ 如何獲取php命令行參數

如何獲取PHP命令行參數

使用 PHP 開發的同學多少都會接觸過 CLI 命令行。經常會有一些定時任務或者一些腳本直接使用命令行處理會更加的方便,有些時候我們會需要像網頁的 GET 、 POST 一樣為這些命令行腳本提供參數。比如在針對某些日期做統計的腳本,就需要傳遞一個日期給它,這樣我們就統計指定日期的一些數據。這類需求應該非常常見,那麼,我們都是如何來接收這些命令行的參數的呢?今天,就來介紹一下這方面的內容。

$argv 獲得所有空格分隔的參數列表

這個變數估計是大家用得比較多的一個接參變數了。它是 PHP 為我們准備好的一個固定變數,目的就是獲取傳遞給腳本的參數數組。

print_r($argv); // php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd // Array // ( // [0] => 如何獲取PHP命令行參數.php // [1] => --a=1 // [2] => -b=2 // [3] => -c=3 // [4] => -d=4 // [5] => --e=5 // [6] => ccc // [7] => ddd // )

這個數組是以參數間隔的空格進行分隔的。第1個元素是當前運行的腳本文件名,也就是說,不管有沒有參數,這個變數一定會有一個 $argv[0] 表示的是當前的腳本文件名。

在日常的開發需求中,其實使用這個變數就已經夠用了。但是這明顯不會是我們今天的主題,大家注意到上面的代碼中我們有很多參數是 -x=xxx 的形式,這種形式的參數是不是和 Linux 的命令選項非常像,沒錯,這就是我們今天要重點介紹的:從命令行參數列表中獲取選項。

getopt() 從命令行參數列表中獲取選項

其實就是這樣一個簡單的函數,我們就可以像 Linux 的命令選項一樣獲取指定的命令值。而且不是像 $argv 按空格進行分隔,命令選項函數會將這些命令選項封裝成數組,組成以選項名為鍵,以等號後面的內容為值的數組,更加方便我們的使用。

// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:')); // Array // ( // [b] => 2 // [c] => 3 // [d] => 4 // )

是不是很神奇,而且非常直觀吧,我們直接就拿到了 b 、 c 、d 的內容並且是格式非常清晰的鍵值數組形式。有同學要問了,a 和 e 呢?還有後面的 ccc 、 ddd 呢?

首先要說明的是,ccc 和 ddd 不是標準的選項參數,也就是說,這個函數接收的內容是以 - 開頭的選項,所以 ccc 和 ddd 不會在這里輸出,並且需要注意的是,非選項參數會中斷選項參數的獲取,在 ccc 之後如果繼續添加 - 開頭的選項也是無法獲取到的,這個我們後面還會看到。而 -- 開頭的選項參數呢?我們直接看下面的長選項功能。

長選項 // php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [e] => 5 // )

沒錯,getopt() 函數的第二個參數就是定義這種 -- 開頭的長選項的,而且需要注意的是,第一個參數是字元串類型,第二個長選項參數是數組類型的。那麼我們把它們結合起來,就當然可以獲取到全部的參數信息啦!

// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [b] => 2 // [c] => 3 // [d] => 4 // [e] => 5 // )

OK,參數選項獲取沒問題了吧,細心的同學肯定又發現了一個問題,這個 getopt() 函數的參數中定義的選項名稱後面為啥都要加個冒號?這就涉及到我們的冒號規則了,請直接往下看。

冒號規則

getopt() 的前兩個參數都支持一套關於選項獲取的規則:

單獨的字元(不接受值) 後面跟隨冒號的字元(此選項需要值) 後面跟隨兩個冒號的字元(此選項的值可選)

我們還是直接通過代碼來看一下。

// 一 // php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('abcdef')); // Array // ( // [b] => // [c] => // [d] => // ) // 二 // php 如何獲取PHP命令行參數.php -f print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // ) // 三 // php 如何獲取PHP命令行參數.php -f 22 print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // ) // 四 // php 如何獲取PHP命令行參數.php -f=22 print_r(getopt('f::')); // Array // ( // [f] => 22 // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // )

這一段比較長,我們一塊一塊來看。首先是不帶冒號的 abcdef 寫法,返回的數組中都包含鍵,但沒有值,對應上面的規則就是不接受這些參數選項的值,你傳了這些參數選項也是只有鍵名而內容是空的。

第二段是定義了一個參數,但是不給值,這時,雙冒號 :: 會有鍵名,而單冒號 : 則什麼都沒有。

第三段是空格形式的選項值,雙冒號 :: 有鍵名但沒有值,單冒號 : 鍵值正常。

第四段是等號 = 形式的選項值,單雙冒號都正常接收到鍵值。

選項參數中斷

上文中我們提到過參數中斷的問題,就是在選項參數之後如果有一個非選項參數的參數出現,getopt() 就無法再獲取到這個非選項參數後面的所有內容了。

// php 如何獲取PHP命令行參數.php -f=22 aa -b=33 // 選項的解析會終止於找到的第一個非選項,之後的任何東西都會被丟棄。 // Array // ( // [f] => 22 // )

通過這個測試可以清晰的看出後面的 b 選項無法獲取。這時,如果我們想知道選項參數在什麼地方或者因為哪個參數而中斷的話,就可以使用 getopt() 函數的第三個參數了。

// php 如何獲取PHP命令行參數.php -f=22 aa -b=33 $optind = null; getopt('f:b:', [], $optind); echo $optind, PHP_EOL; // 返回中斷位置的索引值,2 echo $argv[$optind], PHP_EOL; // 等同於 $argv 的索引順序,aa

注釋已經寫得很清晰了,第三個參數會回調一個參數選項中斷位置的索引,並且這個索引是和 $argv 的索引順序位置一致的。

總結

說實話,在沒看文檔前真的只知道有一個 $argv 變數可以用來獲取命令行腳本的參數,通過這次學習才發現原來還有一個這么強大的選項參數函數。學習的過程非常簡單,如何運用到真實的項目中才是關鍵所在,加油學習,努力實踐吧!

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.php

閱讀全文

與getopt命令相關的資料

熱點內容
量柱比前一天多源碼 瀏覽:416
電子書app怎麼上傳 瀏覽:66
國家反詐中心app注冊怎麼開啟 瀏覽:804
全波差分傅里葉演算法窗長 瀏覽:41
程序員如何講自己做過的項目 瀏覽:7
程序員要看的書頸椎 瀏覽:946
php文章cms 瀏覽:553
CSS權威指南第三版PDF 瀏覽:496
android怎麼搭建框架 瀏覽:184
正宗溯源碼大燕條一克一般多少錢 瀏覽:917
電腦感染exe文件夾 瀏覽:916
wpsppt怎麼轉pdf格式 瀏覽:88
騰訊文檔在線編輯怎麼添加密碼 瀏覽:880
本地不能訪問伺服器地址 瀏覽:865
訪問伺服器命令 瀏覽:835
華為雲伺服器分銷商 瀏覽:954
Linux定位內存泄露 瀏覽:198
工程加密狗視頻 瀏覽:720
不在內網怎麼連接伺服器 瀏覽:664
雲伺服器app安卓下載 瀏覽:966