getopts是一個在 Shell 腳本中用于解析命令行選項的內置命令。
它用于處理腳本的參數,使得腳本可以接受不同的選項和參數,并根據用戶提供的輸入采取相應的操作。
getopts
命令基于 POSIX 標準,并且通常與 while
循環結合使用。它的語法如下:
while getopts "<options>" opt; docase $opt in<option1>)# 處理 option1 的操作;;<option2>)# 處理 option2 的操作;;\?)# 處理無效選項的操作或錯誤提示echo "Invalid option: -$OPTARG";;esac
done
其中,<options>為該腳本程序接受的參數列表,每個參數用一個字母表示;getopts會隨著while循環挨個遍歷參數列表,opt為匹配到的參數字符,OPTARG為當前匹配到的參數值,如果有的話。
比非所有參數都有值,可以在配置<options>參數列表時用冒號:標記改參數是否有值,例如:
#!/bin/bash
# file_name: my_script.shwhile getopts "a:b:cde:fgh" opt
docase $opt ina)echo "Option -a is set with value $OPTARG";;b)echo "Option -b is set with value $OPTARG";;c)echo "Option -c is set";;d)echo "Option -d is set";;e)echo "Option -e is set with value $OPTARG";;f)echo "Option -f is set";;g)echo "Option -g is set";;h)echo "Option -h is set";;\?)echo "Invalid option: -$OPTARG";;esac
done
./my_script.sh -a apple -b36 -c -d -e ays -ghf
#>Option -a is set with value apple
#>Option -b is set with value 36
#>Option -c is set
#>Option -d is set
#>Option -e is set with value ays
#>Option -g is set
#>Option -h is set
#>Option -f is set
總結一下,getopts從第一個腳本命令行參數開始,假如是以-開頭,則識別為是傳參,取-后面的一個字母做為傳參名,然后到getopts配置的<options>參數列表中檢查該傳參是否有值。
如果該傳參有配置值,取該命令行參數剩余部分為參數值,如果剩余部分為空字符串,則取下一個命令行參數做為參數值(不管下一個命令行參數是否以-開頭);
如果該傳參沒有配置值,且當前命令行參數還有其他字符,則取下一個字符做為傳參,繼續判斷;
如果該傳參沒有配置值,且當前命令行參數沒有其他字符,則取下一個命令行參數,繼續判斷;
如果遇到一個命令行參數不是以-開頭,或所有命令行參數遍歷結束,getopts返回False,while循環結束。