在 Shell programming中如何使用 if條件式。
if 條件式語法
使用 command exit status
if command
then
command
...
else
command
...
fi
使用 [ … ]
if [ condition ]
then
command
...
else
command
...
fi
使用 test command
if test condition
then
command
...
else
command
...
fi
if 比較運算子
字串比較運算子
[ … ] | test command | 用法(回傳 TRUE) |
---|---|---|
if [ string1 = string2 ] | if test string1 = string2 | string1與 string2相同 |
if [ string1 != string2 ] | if test string1 != string2 | string1與 string2不相同 |
if [ string ] | if test string | string 不為空值 |
if [ -n string ] | if test -n string | string 不為空值 |
if [ -z string ] | if test -z string | string 為空值 |
整數比較運算子
[ … ] | test command | 用法(回傳 True) |
---|---|---|
if [ int1 -eq int2 ] | if test int1 -eq int2 | int1等於 int2 |
if [ int1 -ne int2 ] | if test int1 -ne int2 | int1不等於 int2 |
if [ int1 -gt int2 ] | if test int1 -gt int2 | int1大於 int2 |
if [ int1 -ge int2 ] | if test int1 -ge int2 | int1大於等於 int2 |
if [ int1 -lt int2 ] | if test int1 -lt int2 | int1小於 int2 |
if [ int1 -le int2 ] | if test int1 -le int2 | int1小於等於 int2 |
檔案運算子
[ … ] | test command | 用法(回傳 True) |
---|---|---|
if [ -d file ] | if test -d file | file是個目錄 |
if [ -e file ] | if test -e file | file存在 |
if [ -f file ] | if test -f file | file是個檔案 |
if [ -r file ] | if test -r file | file可被讀取 |
if [ -s file ] | if test -s file | file內容非空 |
if [ -w file ] | if test -w file | file可被寫入 |
if [ -x file ] | if test -x file | file可被執行 |
if [ -L file ] | if test -x file | file是個符號連結 |
if [ -b file ] | if test -b file | file is a block special file |
if [ -c file ] | if test -c file | file is a character special file |
if [ -g file ] | if test -g file | file’s set group ID flag is set |
if [ -h file ] | if test -h file | file is a symbolic link. This operator is retained for compatibility with previous versions of this program. Do not rely on its existence; use -L instead. |
if [ -k file ] | if test -k file | file’s sticky bit is set |
if [ -p file ] | if test -p file | file is a named pipe (FIFO) |
if [ -u file ] | if test -u file | file’s set user ID flag is set |
if [ -O file ] | if test -O file | file’s owner matches the effective user id of this process |
if [ -G file ] | if test -G file | file’s group matches the effective group id of this process |
if [ -S file ] | if test -S file | file is a socket |
if [ file1 -nt file2 ] | if test file1 -nt file2 | file1比 file2新 |
if [ file1 -ot file2 ] | if test file1 -ot file2 | file2比 file2舊 |
if [ file1 -ef file2 ] | if test file1 -ef file2 | file1與 file2參照到相同檔案 |
邏輯負運算子 !
可使用 !來否定運算式的判斷,例如:[ ! -f file ]。
邏輯 and運算子 -a
例如: [ -f file1 -a -f file2 ]。
邏輯 or運算子 -o
例如: [ -f file1 -o -f file2 ]。
括號的使用
例如: [ \( -f file1 \) -a \( -f file2 \) ]。