shell getopts命令
由于shell命令行的靈活性,自己編寫代碼判斷時,復雜度會比較高。使用內部命令 getopts 可以很方便地處理命令行參數。一般格式為:
getopts optstring name [args]
?????? getopts 的設計目標是在循環中運行,每次執行循環,getopts 就檢查下一個命令行參數,并判斷它是否合法。即檢查參數是否以 - 開頭,后面跟一個包含在 options 中的字母。如果是,就把匹配的選項字母存在指定的變量 variable 中,并返回退出狀態0;如果 - 后面的字母沒有包含在 options 中,就在 variable 中存入一個 ?,并返回退出狀態0;如果命令行中已經沒有參數,或者下一個參數不以 - 開頭,就返回不為0的退出狀態。
getopts引用的三個環境變量:
OPTARG: 上一個由getopts內置命令處理的選項參數的值, option argument(存放選項參數),當選項需要選項參數時,getopts 命令就將其置于變量 OPTARG 中
OPTIND: ?下一個由getopts內置命令處理的參數的序號,option index,每次調用腳本它都會被初始值為1,會逐次遞增。
OPTERR: 如果設為1,bash會顯示getopts的錯誤。設為0,不顯示getopts的錯誤。
getopts 的處理過程:
調用腳本時,OPTIND為初始化為1。每調用一次getopts,就將下一個選項值賦給name , 選項索引值OPTIND也會指向下一個要處理選項的位置,選項參數則會賦給OPTARG
getopts 的設計目標是在循環中運行,每執行一次,getopts就檢查下一個命令行參數,并判斷它是否有效。(即檢查參數是否以-開頭,后面跟一個包含在opstring中的字母)。
有效,則把匹配的選項字母存在指定的變量variable中,并返回退出狀態0(ture);
無效(如果-后面的字母沒有包含在options),就在 variable 中存入一個?,并返回退出狀態0;如果命令行中已經沒有參數,或者下一個參數不以-開頭,就返回不為0的退出狀態(false, 可用于結束while 循環)。
getopts處理完所有參數后,會返回一個非0值(false,退出循環),此時OPTIND索引值指向第一個非選項的參數[args],name置為?
getopts 錯誤處理
正確使用命令時,name用來存儲option, $OPTARG用來存放option的參數。若命令輸入有誤(選項無效,缺少參數),getopts會處理illegal option錯誤和miss option argument錯誤。處理結果與opstring是否以:開頭而不同。opstring 開頭的:用于屏蔽getopts處理時的錯誤消息(腳本中將OPTERR置于0也可以達到同樣的效果)。
?
舉個栗子
#!/bin/bash while getopts u:p:n option do case "$option" inu)echo "option:u, value $OPTARG"echo "next arg index:$OPTIND";;p)echo "option:p"passwd=$OPTARGecho "next arg index:$OPTIND"echo "PASSWD IS: $passwd";;n)echo "option:N"echo "next arg index:$OPTIND";;\?)echo "Usage: args [-U] [-p] [-n]"echo "-u means uses"echo "-p means passwd"echo "-n means name"exit 1;;esac done
原文鏈接:https://www.cnblogs.com/hello-wei/p/9778407.html
轉載于:https://www.cnblogs.com/jianzhaojing/p/11451652.html
總結
以上是生活随笔為你收集整理的shell getopts命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 004_常用词汇句子翻译记录
- 下一篇: 嘟嘟嘟