- 命令行參數
讀取參數,$0程序名,$1第一個參數以此類推,直到$9。第10個參數開始需要用花括號把數字括起來 ${10}
讀取程序名,默認$0是讀取帶路徑的程序名,但是有時候只需要腳本名,並不需要路徑,這時就可以用basename了,比如:
這樣可以根據不同的腳本名執行不同的功能
測試參數,當需要參數而沒有跟參數時會報錯。所以需要檢查數據是不是存在就很有必要,如下所示:
- 特殊參數變量
參數計數 $# 該變量記錄腳本運行時的參數個數,如果要在大括號內使用該參數的話需要把$改為!因為大括號內不能使用美元符。
抓取所有的數據,$*和$@可以提供對所有參數的快速訪問。$*把所有參數當成一個參數,$@會單獨處理每個參數。
- 移動變量 shift 默認左移一個位數,可以在shift后面跟數字修改默認左移位數。shift 2 左移2位。
- 處理選項
簡單的選項
運行結果:
分離參數和選項
此處用破折號來區分選項和參數
處理帶值的選項
如上圖所示處理帶值的選項 -b
getopt 命令,能夠識別命令行參數
getopt options optstring parameters
optstring 列出你要在腳本中用到的每個命令行選項字母,然后再每個需要參數值的選項字母后加一個冒號。getopt會基於定義的optstring解析提供的參數。
如圖所示: -b 選項需要參數所以b后面有個: 參數是test1 而test2 和test3是參數,用雙破折號分開
當有無效參數出現的話會提示錯誤,如下圖所示:
當加上-q選項時會忽略錯誤信息,如下所示:
注意-q 的位置
腳本中使用getopt
采用set命令 -- 選項會將命令行參數替換成set命令的命令行的值。首先原始的腳本命令行參數傳給getopt,然后getopt把輸出給set命令。比如下面
set -- `getopt -q ab:cd "$@"` 下面是一個例子:
getopts命令
getopts optstring variable,在optstring前面加個: 可以去掉錯誤消息。
getopts用到兩個環境變量。如果選項需要跟一個參數值,OPTARG環境變量就會保存這個值。OPTIND環境變量保存了參數列表中getopts正在處理的參數位置。
對於未定義的選項統一輸出成問號:
其中d是未定義的。
getopts處理每個選項時會將OPTIND環境變量值增一。
使用OPTIND的值和shift命令來移動參數,如下圖所示:
其中OPTIND的值是記錄參數的位置,移動-1個量正好到達參數的位置。
- 獲得用戶輸入
基本讀取
-n選項會移掉字符串末尾的換行符,允許腳本用戶緊跟其后輸入數據。
-p 參數可以在read后面跟多個變量,依次賦值
如果read后面不跟變量,那么默認會把收到的數據放到特殊環境變量REPLY中
-t 設置超市時間,單位秒 ,超時后read命令會以非零退出狀態碼退出
-n后面的數字1 表示直接受一個字符然后就主動退出,不用再按回車鍵。
-s隱藏輸入,事實上數據會被顯示,只是read命令將文本顏色設置成跟背景色一樣
從文件中讀取