測試
測試結(jié)構(gòu)
- 一個if/then結(jié)構(gòu)測試一列命令的退出狀態(tài)是否為0(因為依照慣例卸伞,0意味著命令執(zhí)行成功),如果是0則會執(zhí)行一個或多個命令娘香。
- 有一個命令** [** ([左方括]是特殊字符). 它和test是同義詞,因為效率的原因苍狰,它被內(nèi)建在shell里。這個命令的參數(shù)是比較表達(dá)式或者文件測試烘绽,它會返回一個退出狀態(tài)指示比較的結(jié)果(0表示真淋昭,1表示假)。
- [[]] 同樣是測試命令诀姚,是一個比較關(guān)鍵字响牛。
- if 命令不僅能測試由方括號括起來的條件,也能測試任何命令。
root@ubuntu:/home/newer# if cmp 1.txt keepme &>/dev/null; then echo "same"; else echo "diffrent";fi
diffrent
root@ubuntu:/home/newer# if grep -r dog 1.txt &>/dev/null; then echo "dog"; fi
dog
root@ubuntu:/home/newer# if [$abc] &>/dev/null; then echo "uninitialized variable is true"; else echo "uninitailized variable is fause"; fi
uninitailized variable is fause
#!/bin/bash
# 小技巧:
# 如果你不確定某一條件怎么被求值,
#+ 可以用一個if-test結(jié)構(gòu)來測試.
echo
echo "Testing \"0\""
if [ 0 ] # 0
then
echo "0 is true."
else
echo "0 is false."
fi # 0為真.
echo
echo "Testing \"1\""
if [ 1 ] # 1
then
echo "1 is true."
else
echo "1 is false."
fi # 1為真.
echo
echo "Testing \"-1\""
if [ -1 ] # -1
then
echo "-1 is true."
else
echo "-1 is false."
fi # -1為真.
echo
echo "Testing \"NULL\""
if [ ] # NULL (空條件)
then
echo "NULL is true."
else
echo "NULL is false."
fi # NULL為假.
echo
echo "Testing \"xyz\""
if [ xyz ] # 字符串
then
echo "Random string is true."
else
echo "Random string is false."
fi # 任意字符串為true.
echo
echo "Testing \"\$xyz\""
if [ $xyz ] # 變量$xyz為null值, 但...
# 它只是一個未初始化的變量.
then
echo "Uninitialized variable is true."
else
echo "Uninitialized variable is false."
fi # 未初始化的變量為false.
echo
echo "Testing \"-n \$xyz\""
if [ -n "$xyz" ] # 進(jìn)一步實驗核實.
then
echo "Uninitialized variable is true."
else
echo "Uninitialized variable is false."
fi # 未始初化的變量為false.
echo
xyz= # 已初始化, 但設(shè)置成null值.
echo "Testing \"-n \$xyz\""
if [ -n "$xyz" ]
then
echo "Null variable is true."
else
echo "Null variable is false."
fi # Null值變量為假.
echo
# 什么時候"false"為真?
echo "Testing \"false\""
if [ "false" ] # "false"是一個字符串.
then
echo "\"false\" is true." #+ 它被測試為真.
else
echo "\"false\" is false."
fi # "false"為真.
echo
echo "Testing \"\$false\"" # 再來呀打,未初始化的變量.
if [ "$false" ]
then
echo "\"\$false\" is true."
else
echo "\"\$false\" is false."
fi # "$false"變量為假.
# 現(xiàn)在, 我們?nèi)〉昧祟A(yù)期的效果.
# 如果我們測試未初始化的變量"$true"會發(fā)生什么?
echo
exit 0
結(jié)構(gòu)
if [ condition1 ]
then
command1
command2
command3
elif [ condition2 ]
# 和else if相同
then
command4
command5
else
default-command
fi
等價的測試
#!/bin/bash
echo
if test -z "$1"
then
echo "No command-line arguments."
else
echo "First command-line argument is $1."
fi
echo
if /usr/bin/test -z "$1" # 和內(nèi)建的"test"命令一樣.
then
echo "No command-line arguments."
else
echo "First command-line argument is $1."
fi
echo
if [ -z "$1" ] # 和上面代碼塊的功能一樣
# if [ -z "$1" 應(yīng)該來說會運行, 但是...
#+ Bash給出錯誤說少了一個封閉的右方括.
then
echo "No command-line arguments."
else
echo "First command-line argument is $1."
fi
echo
if /usr/bin/[ -z "$1" ] # 同樣和上面的代碼塊一樣.
# if /usr/bin/[ -z "$1" # 工作, 但還是給出一個錯誤信息.
# # 注意:
# 這個已經(jīng)在bash 3.x版本被修補好了矢赁。
then
echo "No command-line arguments."
else
echo "First command-line argument is $1."
fi
echo
exit 0