
在《shell必備基礎知識》中說到了一些入口引數的基本使用:
/home/shouwang/test.sh para1 para2 para3$0 $1 $2 $3腳本名 第一個引數 第三個引數
有什么不方便之處?
看到這里,你可能覺得沒什么,這不是學Shell都知道的知識嗎?
但是你有沒有覺得這樣使用引數有這樣的問題
- 要知道引數的順序,確定每一個位置的引數是什么含義
- 不能隨意調換位置
- 使用第三個引數,必須要有第一個,第二個引數
下面簡單示例說明一下,
引數順序固定
#!/usr/bin/env bash#test.shecho "para1 $1"echo "para2 $2"echo "para3 $3"
這個腳本程式很簡單,只是輸出第一二三個引數:
$ ./test.sh 1 2 3para1 1para2 2para3 3
你看,這樣para1對應第一個引數,如果位置調換了,就變了:
$ ./test 1 3 2para1 1para2 3para3 2
只要順序一變,引數就對應不上了,假設你有時候不需要第二個引數,要使用第三個引數,你是不是還必須得輸入第二個引數?
優雅地處理shell引數
鋪墊了這么多,本文到底想介紹什么呢?
實際上這種形式你已經接觸過很多了,對于寫的程式,我已經在《如何優雅地處理命令列引數》中介紹過了,你在使用linux命令的時候想必也已經領略了,例如:
$ find -name "filename"
用-name引數指定要查找的檔案名,而不是說第一個引數是檔案名,第二個引數是xxx,
那么shell腳本如何像這樣將引數當成選項來處理呢?實際上都是類似的,看下面的例子:
#!/usr/bin/env bash# -n 名稱# -a 作者# -h 幫助while getopts ":n:a:h" optnamedo case "$optname" in "n") echo "get option -n,value is $OPTARG" ;; "q") echo "get option -a ,value is $OPTARG" ;; "h") echo "get option -h,eg:./test.sh -n 編程珠璣 -a 守望先生" ;; ":") echo "No argument value for option $OPTARG" ;; "?") echo "Unknown option $OPTARG" ;; *) echo "Unknown error while processing options" ;; esac #echo "option index is $OPTIND"done
解釋一下:
- 有兩個預先定義的變數,OPTARG表示選項值,OPTIND表示引數索引位置,類似于前面提到$1,
- n后面有:,表示該選項需要引數,而h后面沒有:,表示不需要引數
- 最開始的一個冒號,表示出現錯誤時保持靜默,并抑制正常的錯誤訊息
我們試一下效果:
$ ./test.sh -aNo argument value for option a$ ./test.sh -hget option -h,eg:./test.sh -n 編程珠璣 -a 守望先生$ ./test.sh -n 編程珠璣 -a 守望先生get option -a ,value is 守望先生
你看這樣使用引數,不需要管引數的位置,并且引數還是可選,互不干擾,
以上就是良許教程網為各位朋友分享的處理Shell腳本引數,
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/253789.html
標籤:其他
