今天小編就爲大家分享一篇關於Shell腳本中使用getopts處理多命令行選項,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
在Linux系統中,許多命令都提供了選項,使用不同的選項就會得到不通的執行結果
例如:ls命令,ls命令提供了多個選項:-l、-a、-A、-h、-i等等,每個選項具有不同的功能,我們自己寫腳本時也可以定義選項,提示用戶如何使用,本文介紹如何使用getopts命令來處理命令選項。
1.getopts命令的如何使用:
用getopts命令獲取到腳本選項後,getopts會將獲取到的選項所對應的參數(選項對應的參數,並不是選項本身,有的命令選項後面是需要跟一個參數的,例如tcpdump 的-w選項,後面需要指定一個文件來保存抓包數據)自動保存到OPTARG這個變量中。
getopts命令格式:getopts OPTSTRING VARNAME
- OPTSTRING:告訴getopts會有哪些選項和參數(用選項後面加“:”來表示選項後面需要加參數)
- VARNAME:保存getopts獲取到的選項
示例:getopts ahf: var
告訴getopts查找-a、-h、-f選項,其中f選項後面需要跟一個參數,獲取到的選項都保存到變量var中
getopts命令支持兩種錯誤報告模式,詳細錯誤報告模式和抑制錯誤報告模式。
在詳細錯誤報告模式下:如果getopts檢測到一個無效的選項,var的值會被設置爲(?);如果getopts檢測到一個後面需要跟參數的選項,後面沒有參數,var的值也會被設置爲(?)
在抑制錯誤報告模式下:如果getopts檢測到一個無效的選項,var的值會被設置爲(?),變量OPTARG會被設置爲這個無效的選項;如果getopts檢測到一個後面需要跟參數的選項,後面沒有參數,var的值會被設置爲(:),變量OPTARG會被設置爲這個無效的選項
2.通過腳本來講解getopts如何獲取選項,如何賦值給變量VARNAME和OPTSTRING:
示例:
#!/bin/bash status=off #定義變量status,初始值設置爲off filename="" #定義變量filename,用於保存選項參數(文件) output="" #定義變量output,用於保存選項參數(目錄) Usage () { #定義函數Usage,輸出腳本使用方法 echo "Usage" echo "myscript [-h] [-v] [-f <filename>] [-o <filename>]" exit -1 } while getopts :hvf:o: varname #告訴getopts此腳本有-h、-v、-f、-o四個選項,-f和-o後面需要跟參數 (沒有選項時,getopts會設置一個退出狀態FALSE,退出循環) do case $varname in h) echo "$varname" Usage exit ;; v) echo "$varname" status=on echo "$status" exit ;; f) echo "$varname" echo "$OPTARG" filename=$OPTARG #將選項的參數賦值給filename if [ ! -f $filename ];then #判斷選項所跟的參數是否存在且是文件 echo "the source file $filename not exist!" exit fi ;; o) echo "$varname" echo "$OPTARG" output=$OPTARG #將選項參數賦值給output if [ ! -d $output ];then #判斷選項參數是否存在且是目錄 echo "the output path $output not exist" exit fi ;; :) #當選項後面沒有參數時,varname的值被設置爲(:),OPTARG的值被設置爲選項本身 echo "$varname" echo "the option -$OPTARG require an arguement" #提示用戶此選項後面需要一個參數 exit 1 ;; ?) #當選項不匹配時,varname的值被設置爲(?),OPTARG的值被設置爲選項本身 echo "$varname" echo "Invaild option: -$OPTARG" #提示用戶此選項無效 Usage exit 2 ;; esac done
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對神馬文庫的支持。如果你想了解更多相關內容請查看下面相關鏈接