1. 程式人生 > >Shell腳本 (二)文本測試、整數值比較、字符串比較 條件測試操作 if語句應用實例

Shell腳本 (二)文本測試、整數值比較、字符串比較 條件測試操作 if語句應用實例

內存 root 條件測試 主機 serve 覆蓋 整數 local 分數

####################test命令####################
測試特定的表達式是否成立,當條件成立時,測試語句的返回值為0,否則為其他數值
格式1:test 條件表達式
格式2:[ 條件表達式 ]
·
文件測試
[ 操作符 文件或目錄 ]
-d:測試是否為目錄(Directory)
-e:測試目錄或文件是否存在(Exist)
-f:測試是否為文件(File)
-r:測試當前用戶是否有權限讀取(Read)
-w:測試當前用戶是否有權限寫入(Write)
-x:測試當前用戶是否有權限執行(eXcute)
·
[root@localhost ~]# [ -d /media/cdrom ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d /media/cdrom/Server ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d /media/cdrom ] && echo "YES"
YES
·
####################整數值比較####################
[ 整數1 操作符 整數2 ]
常用的測試操作符
-eq:等於(Equal)
-ne:不等於(Not Equal)
-gt:大於(Greater Than)
-lt:小於(Lesser Than)
-le:小於或等於(Lesser or Equal)
-ge:大於或等於(Greater or Equal)
·
Unum=who | wc -l ###查看當前以登錄用戶數
[ $Unum -gt 2 ] && echo "Too many." ###如果大於2就顯示Too many.小於或等於則不提示
Too many.
·
FreeCC=$( free -m | grep "Mem: " | awk ‘{print $6}‘ ) ###查看物理內存(Mem)當低於1024MB時輸出具體值
[ $FreeCC -lt 1024 ] && echo ${FreeCC}MB
·
####################字符串比較####################
格式
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]
常用的測試操作符
=:字符串內容相同
!=:字符串內容不同,! 號表示相反的意思
-z:字符串內容為空
·
echo $LANG
[ $LANG != "en.US" ] && echo "Not en.us"
·
read -p "是否覆蓋現有文件(yes/no)?" ACK
是否覆蓋現有文件(yes/no)?yes
[ $ACK = "yes" ] && echo "覆蓋"
覆蓋
·
read -p "是否覆蓋現有文件(yes/no)?" ACK
是否覆蓋現有文件(yes/no)?no
[ $ACK = "no" ] && echo "不覆蓋"
不覆蓋
·
####################邏輯測試####################
格式1:[ 表達式1 ] 操作符 [ 表達式2 ] ...
格式2:命令1 操作符 命令2 ...
常用的測試操作符
-a或&&:邏輯與,“而且”的意思
-o或||:邏輯或,“或者”的意思
!:邏輯否,相反的
·
uname -r
Mnum=$(uname -r | awk -F. ‘{print $1}‘)
Snum=$(uname -r | awk -F. ‘{print $2}‘)
[ $Mnum -ge 3 ] && [ $Snum -gt 4 ] && echo "符合要求" ###前面兩個都成立,則輸出
·
####################if語句的結構#################
·
1、單分支結構
if 條件測試
then
命令判斷
fi
·
判斷掛載點目錄,若不存在則自動創建
[root@localhost ~]# cat chkmountdir.sh
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
mkdir -p $MOUNT_DIR
fi
·
2、雙分支結構
if 條件測試
then
命令序列1
else
命令序列2
fi
·
判斷目標主機是否存活,顯示檢測結果
[root@localhost ~]# cat pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is up."
else
echo "Host $1 is down."
fi
·
·
3、多分支結構
if 條件測試操作1
then
命令序列1
elif 條件測試操作2
then
命令序列2
else
命令序列3
fi
·
判斷分數範圍,分出優秀、合格、不合格三檔
[root@localhost ~]# vi gradediv.sh
#!/bin/bash
read -p "請輸入您的分數(0-100):" GRADE
if [ $GRADE -gt 100 ]
then
echo "$GRADE 分,大於100分了,輸入有問題"
elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分,優秀!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格!"
else
echo "$GRADE 分,不合格!"
fi
·
[root@localhost opt]#chmode +x gradediv.sh
[root@localhost opt]# ./gradediv.sh
請輸入您的分數(0-100):101
101 分,大於100分了,輸入有問題
[root@localhost opt]# ./gradediv.sh
請輸入您的分數(0-100):88
88 分,優秀!
[root@localhost opt]# ./gradediv.sh
請輸入您的分數(0-100):0
0 分,不合格!

Shell腳本 (二)文本測試、整數值比較、字符串比較 條件測試操作 if語句應用實例