位置參數
標記
$0:腳本文件絕對路勁
$1-9:小於10位置參數標記
${10..}:大於10的位置參數標記
$#:參數總數
$*:展開成一個從 1 開始的位置參數列表。當它被用雙引號引
起來的時候,展開成一個由雙引號引起來的字符串,包含了
所有的位置參數,每個位置參數由 shell 變量 IFS 的第一個
字符(默認爲一個空格)分隔開。
$@:展開成一個從 1 開始的位置參數列表。當它被用雙引號引
起來的時候,它把每一個位置參數展開成一個由雙引號引起
來的分開的字符串。
shift:多參數列表逐一訪問
用法
每次 shift 命令執行的時候,變量 $2 的值會移動到變量 $1 中,
變量 $3 的值會移動到變量$2 中,依次類推。變量 $# 的值也會相應的減 1。
舉例
#!/bin/bash
count=1
while [[ $# -gt 0 ]]; do
echo "Argument $count = $1"
count=$((count + 1))
shift
done
case分支
基本語法
case word in
[pattern [| pattern]...) commands ;;]...
esac
模式匹配 pattern
舉例
#!/bin/bash
read -p "enter word > "
case $REPLY in
a|A) echo "is a or A." ;;
[[:alpha:]]) echo "is a single alphabetic character." ;;
[ABC][0-9]) echo "is A, B, or C followed by a digit." ;;
???) echo "is three characters long." ;;
*.txt) echo "is a word ending in '.txt'" ;;
*) echo "is something else." ;;
esac
匹配多個測試條件
#!/bin/bash
# case4-2: test a character
read -n 1 -p "Type a character > "
# ;;& 用於匹配多個測試條件,匹配到一個後繼續匹配下一個而不是直接退出。
case $REPLY in
[[:upper:]]) echo "'$REPLY' is upper case." ;;&
[[:lower:]]) echo "'$REPLY' is lower case." ;;&
[[:alpha:]]) echo "'$REPLY' is alphabetic." ;;&
[[:digit:]]) echo "'$REPLY' is a digit." ;;&
[[:graph:]]) echo "'$REPLY' is a visible character." ;;&
[[:punct:]]) echo "'$REPLY' is a punctuation symbol." ;;&
[[:space:]]) echo "'$REPLY' is a whitespace character." ;;&
[[:xdigit:]]) echo "'$REPLY' is a hexadecimal digit." ;;&
esac