#!/bin/sh
yes_func()
{
echo yes_func
true
}
no_func()
{
echo no_func
false
}
if ! yes_func || yes_func; then
echo two yes_func
fi
if ! no_func && ! no_func; then
echo two no_func
fi
驚歎號 '!' 是真假值反相的運算,要與函式名稱之間用空白隔開,否則會成為函式名稱的一部份。
另外就是「且」邏輯運算 '&&' 與「或」邏輯運算 '||' 的執行優先序都比反相邏輯運算 '!' 還要低。
接下來是數值的例子:
#!/bin/sh
NUM=5
if [ $NUM -eq 5 ]; then
echo "#$NUM == 5"
else
echo "#$NUM != 5"
fi
if [ $NUM -ne 5 ]; then
echo "#$NUM != 5"
else
echo "#$NUM == 5"
fi
if [ $NUM -gt 0 -a $NUM -lt 10 ]; then
echo "0 < #$NUM < 10"
fi
NUM=11
if [ ! $NUM -gt 0 -o ! $NUM -lt 10 ]; then
echo "#$NUM <= 0 or #$NUM >= 10"
fi
if [ $NUM -le 0 -o $NUM -ge 10 ]; then
echo "#$NUM <= 0 or #$NUM >= 10"
fi
if [ ! $NUM -lt 0 -a $NUM -gt 10 ]; then
echo "#$NUM >= 0 and #$NUM > 10"
fi
if [ $NUM -ge 0 -a $NUM -gt 10 ]; then
echo "#$NUM >= 0 and #$NUM > 10"
fi
數值的算數運算子有:
- '-eq' 等於 '=='
- '-ne' 不等於 '!='
- '-lt' 小於 '<'
- '-gt' 大於 '>'
- '-le' 小於或等於 '<='
- '-ge' 大於或等於 '>='
而 '-a' 相當於前面提過的「且」邏輯運算 '&&','-o' 則是相當於「或」邏輯運算 '||',同樣地優先序都比反相邏輯運算 '!' 還要低。
最後是是否為空字串的例子:
#!/bin/sh
STR1="foo"
STR2=""
if [ ! -z "$STR1" -a -z "$STR2" ]; then
echo "'$STR1' is not empty, and '$STR2' is empty."
fi
if [ -n "$STR1" -a -z "$STR2" ]; then
echo "'$STR1' is not empty, and '$STR2' is empty."
fi
if [ -z "$STR1" -o -z "$STR2" ]; then
echo "'$STR1' is empty, or '$STR2' is empty."
fi
STR1="foo"
STR2="bar"
if [ ! -z "$STR1" -a ! -z "$STR2" ]; then
echo "'$STR1' is not empty, and '$STR2' is not empty."
fi
STR1=""
STR2=""
if ! [ -n "$STR1" -o -n "$STR2" ]; then
echo "'$STR1' is empty, and '$STR2' is empty."
fi
if [ -z "$STR1" -a -z "$STR2" ]; then
echo "'$STR1' is empty, and '$STR2' is empty."
fi
'-z' 是否為空字串的運算子,'-n' 是否為非空字串的運算子。
跟前面的數值運算一樣都需要用中括號包起來使用,另外就是反相邏輯運算 '!' 可以直接使用在中括號的運算結果。