Title here
Summary here
Positional Parameters,腳本嘅位置參數。
$0
:腳本名,包含路徑。$1
:第一個參數,以此類推。${10}
:大於 9 嘅參數要用花括號。#!/usr/bin/env bash
echo $0
echo $1
./foo a
./foo
a
可以去掉腳本嘅路徑,只保留名稱。
basename /home/kuga/foo
腳本中嘅用法。
name=$(basename $0)
shift
命令可以把位置參數左移一位。
#!/usr/bin/env bash
i=1
while [ -n "$1" ]
do
echo "param #$i = $1"
i=$[ $i + 1 ]
shift
done
./foo a b
param #1 = a
param #2 = b
選項就係以喺單個連字符後跟單個字母,如:-a
。由於選項同參數都係出現喺腳本嘅後面,為咗區分開嚟,一般係用雙連字符 --
,左邊係選項,右邊係參數,例如。
./foo -a -b -- p1 p2
要喺腳本中正確解釋選項同參數,唔係一件容易嘅事,為此官方提供咗兩個工具。
getopt
--help
。getopts
Github 上面都有唔少選項解釋項目。
getopt optstring parameters
optstring
:選項嘅定義。parameters
:選項嘅內容。例如對於 optstring=ab:c
。
a
同 c
代表無值選項。b
後跟 :
表示有值選項。睇下下面例子嘅輸出。
getopt ab:c -a -b bval -c p1 p2
-a -b bval -c -- p1 p2
可以睇到佢使用 --
把選項同參數分隔開咗。
getopts
係 Bash 嘅內置命令,佢會逐個解釋選項,然後把選項嘅信息存儲喺特定變量中,方便腳本訪問。呢個先係畀我呢啲小菜雞用嘅命令。
getopts optstring name
name
:當前選項嘅名稱。OPTIND
:每處理一個項目,該值會加 1。OPTARG
:如果選項有值,會保存在呢個變量中。#!/usr/bin/env bash
while getopts "ab:c:" name; do
case $name in
a)
echo "Option -a"
;;
b)
echo "Option -b: $OPTARG"
;;
c)
echo "Option -c: $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG"
exit 1
;;
esac
done
# 顯示 OPTIND 嘅值
echo "OPTIND: $OPTIND"
# 使用 shift 來移除已解析嘅選項同參數
shift $((OPTIND - 1))
# 剩餘嘅非選項參數
echo "Params: $@"
./foo -a -b v1 -c v2 p1 p2
Option -a
Option -b: v1
Option -c: v2
OPTIND: 6
Params: p1 p2