#!/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' 是否為非空字串的運算子。
跟前面的數值運算一樣都需要用中括號包起來使用,另外就是反相邏輯運算 '!' 可以直接使用在中括號的運算結果。