標籤:if 語句用法
if單分支 文法
if [條件]
then
[指令]
fi
===================
if 雙分支 文法
if [條件]
then
[指令]
else
[指令]
fi
===================
if 多分支 文法
if [條件]
then
[指令]
elif [條件]
then
[指令]
......
else
[指令]
fi
===================
if [條件]
then
[指令]
elif [條件]
then
[指令]
elif [條件]
then
[指令]
......
else
[指令]
fi
===================
###################################
shell 編程中使用到得if語句內判斷參數
-b 當file存在並且是塊檔案時返回真
-c 當file存在並且是字元檔案時返回真
-d 當pathname存在並且是一個目錄時返回真
-e 當pathname指定的檔案或目錄存在時返回真
-f 當file存在並且是正規檔案時返回真
-g 當由pathname指定的檔案或目錄存在並且設定了SGID位時返回為真
-h 當file存在並且是符號連結檔案時返回真,該選項在一些老系統上無效
-k 當由pathname指定的檔案或目錄存在並且設定了“粘滯”位時返回真
-p 當file存在並且是命令管道時返回為真
-r 當由pathname指定的檔案或目錄存在並且可讀時返回為真
-s 當file存在檔案大小大於0時返回真
-u 當由pathname指定的檔案或目錄存在並且設定了SUID位時返回真
-w 當由pathname指定的檔案或目錄存在並且可執行時返回真。一個目錄為了它的內容被訪問必然是可執行檔。
-o 當由pathname指定的檔案或目錄存在並且被子當前進程的有效使用者ID所指定的使用者擁有時返回真。
UNIX Shell 裡面比較字元寫法:
-eq 等於
-ne 不等於
-gt 大於
-lt 小於
-le 小於等於
-ge 大於等於
-z 空串
= 兩個字元相等
!= 兩個字元不等
-n 非空串
-------------------------------------------------------------------------
更為詳細的說明:
運算子 描述 樣本
檔案比較子
-e filename 如果 filename 存在,則為真 [ -e /var/log/syslog ]
-d filename 如果 filename 為目錄,則為真 [ -d /tmp/mydir ]
-f filename 如果 filename 為常規檔案,則為真 [ -f /usr/bin/grep ]
-L filename 如果 filename 為符號連結,則為真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可讀,則為真 [ -r /var/log/syslog ]
-w filename 如果 filename 可寫,則為真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可執行,則為真 [ -L /usr/bin/grep ]
filename1 -nt filename2
如果 filename1 比 filename2 新,則為真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2
如果 filename1 比 filename2 舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字串比較運算子 (請注意引號的使用,這是防止空格擾亂代碼的好方法)
-z str 如果 str 長度為零,則為真 [ -z $myvar ]
-n str 如果 str 長度非零,則為真 [ -n $myvar ]
str1 = str2 如果 str1 與 str2 相同,則為真 [ $myvar = one two three ]
str1 != str2 如果 str1 與 str2 不同,則為真 [ $myvar != one two three ]
算術比較子
num1 -eq num2 等於 [ 3 -eq $mynum ]
num1 -ne num2 不等於 [ 3 -ne $mynum ]
num1 -lt num2 小於 [ 3 -lt $mynum ]
num1 -le num2 小於或等於 [ 3 -le $mynum ]
num1 -gt num2 大於 [ 3 -gt $mynum ]
num1 -ge num2 大於或等於 [ 3 -ge $mynum ]
#################################################################
檢查記憶體的指令碼,並警示
[[email protected] script]# vi cheak_mem.sh
#!/bin/sh
used_mem=` free -m | awk ‘NR==3{print $NF}‘`
if [ $used_mem -lt 10000 ]
then
echo "mem is not enough ,$used_mem." >> mem.log
echo "mem is not enough ,$used_mem." | mail -s "warning $(date +%F)" [email protected]
fi
做定時任務
[[email protected] script]# cat cheak_mem.sh
#!/bin/sh
used_mem=` free -m | awk ‘NR==3{print $NF}‘`
if [ $used_mem -lt 10000 ]
then
echo "mem is not enough ,$used_mem." >> mem.log
echo "mem is not enough ,$used_mem." | mail -s "warning $(date +%F)" [email protected]
fi
[[email protected] script]# crontab -l
#########################
*/3 * * * * /bin/sh /root/script/cheak_mem.sh &> /dev/null
[[email protected] script]#
########################################################
計算 傳參
[[email protected] script]# cat jisuan.sh
#!/bin/sh
if [ $# -ne 2 ]
then
echo "error : please input two number!"
echo "USAGE:$0 num1 num2"
exit 1
fi
expr $1 + $2 &> /dev/null
if [ $? -ne 0 ]
then
echo "error : please input two number!"
echo "USAGE:$0 num1 num2"
exit 2
else
echo "$1 - $2 = $(($1-$2))"
echo "$1 + $2 = $(($1+$2))"
echo "$1 * $2 = $(($1*$2))"
echo "$1 / $2 = $(($1/$2))"
echo "$1 % $2 = $(($1%$2))"
fi
[[email protected] script]#
本文出自 “奮鬥吧” 部落格,請務必保留此出處http://lvnian.blog.51cto.com/7155281/1701060
if 語句詳細用法