字符測試
文件測試
條件測試的表達式
有三種
[code][ expression ] --方括號與表達式之間一定要有一個空格 [[ expression ]] test expression
[code]-eq: 測試兩個整數是否相等 例:$A -eq $B -ne: 測試兩個整數是否不等 不等為真,相等為假 -gt: 測試一個數是否大於另一個數;大於,為真;否則,為假; -lt: 測試一個數是否小於另一個數;小於,為真;否則,為假; -ge: 大於或等於 -le: 小於或等於
[code]邏輯與: && 第一個條件為假時,第二條件不用再判斷; 第一個條件為真時,第二條件必須得判斷; 邏輯或: || 第一個條件為假時,第二條件必須得判斷; 第一個條件為真時,第二條件不用再判斷;例:比較兩個數大小
[code][root@iZ28g26851kZ ~]# A=12 [root@iZ28g26851kZ ~]# B=15 [root@iZ28g26851kZ ~]# [ $A -gt $B ] && echo "A比較大" || echo "B比較大" B比較大 [root@iZ28g26851kZ ~]# A=20 [root@iZ28g26851kZ ~]# [ $A -gt $B ] && echo "A比較大" || echo "B比較大" A比較大 [root@iZ28g26851kZ ~]#如果A大於B則
[ $A -gt $B ]為真,需要執行(判斷)
echo "A比較大"
最終
[ $A -gt $B ] && echo "A比較大"為真,所以不用再執行
echo "B比較大"
[code]if 判斷條件 ;then statement1 ... fi
[code]if 判斷條件 ;then statement1 ... else statement2 ... fi
[code]if 判斷條件 ;then statement1 ... elif 判斷條件2 ; then statement2 ... elif 判斷條件3 ; then statement3 ... else statement4 ... fi
例:判斷用戶user1是否存在,存在顯示用戶已存在,不存在則創建用戶,密碼和用戶名相同
adduser.sh
[code]#!/bin/bash NAME=user1 if id $NAME &> /dev/null; then echo "用戶已存在" else echo "當前一共有用戶`wc -l /etc/passwd | cut -d" " -f1`人" echo "用戶不存在,正在創建用戶" useradd $NAME echo $NAME | passwd --stdin $NAME &> /dev/null echo "當前一共有用戶`wc -l /etc/passwd | cut -d" " -f1`人" fi
執行結果
[code][root@iZ28g26851kZ ~]# ./adduser.sh 當前一共有用戶30人 用戶不存在,正在創建用戶 當前一共有用戶31人 [root@iZ28g26851kZ ~]# ./adduser.sh 用戶已存在 [root@iZ28g26851kZ ~]#
[code][root@iZ28g26851kZ ~]# b=23 [root@iZ28g26851kZ ~]# a=12 [root@iZ28g26851kZ ~]# let c=$a+$b [root@iZ28g26851kZ ~]# echo $c 35 [root@iZ28g26851kZ ~]#
[code][root@iZ28g26851kZ ~]# c=$[$a+$b*2] [root@iZ28g26851kZ ~]# echo $c 58 [root@iZ28g26851kZ ~]#
[code][root@iZ28g26851kZ ~]# c=$(($a*2+$b*2)) [root@iZ28g26851kZ ~]# echo $c 70 [root@iZ28g26851kZ ~]#
且 運算數與運算符號之間一個要有一個空格,如果沒有空格就會像下面這樣
[code][root@iZ28g26851kZ ~]# expr 10/3 10/3 [root@iZ28g26851kZ ~]#原樣輸出了,,所以必須要加上空格
例:
[code][root@iZ28g26851kZ ~]# expr 10 / 3 3 [root@iZ28g26851kZ ~]# expr 10 + 3 13 [root@iZ28g26851kZ ~]# expr 10 - 3 7 [root@iZ28g26851kZ ~]# expr 10 * 3 expr: syntax error可以看出,加,減,除,都沒有問題,唯獨乘法運算時居然說語法錯誤,
好吧,這裡expr應該是吧 * 當匹配字符用了,所以需要轉義一下
[code][root@iZ28g26851kZ ~]# expr 10 \* 3 30ok,這樣就搞定了
[code]-e FILE: 測試文件是否存在 -f FILE: 測試文件是否為普通文件 -d FILE: 測試指定路徑是否為目錄 -r FILE: 測試當前用戶對指定文件是否有讀取權限 -w FILE: 測試當前用戶對指定文件是否有寫入權限 -x FILE: 測試當前用戶對指定文件是否有執行權限例:判斷一個文件是否存在,存在則顯示其行數
[code]#!/bin/bash FILENAME=/etc/passwd if [ -e $FILENAME ]; then echo "文件存在" echo "文件一共有` wc -l $FILENAME | cut -d" " -f1`行" else echo "文件不存在" fi
[code]0:表示腳本執行成功 1-255:表示執行失敗 也可以什麼都不返回,腳本會默認返回上一條結果的執行狀態例:
exittest.sh
[code]#!/bin/bash echo "第一行" echo "第二行" exit 18 echo "第三行"執行結果
[code][root@iZ28g26851kZ ~]# ./exittest.sh 第一行 第二行 [root@iZ28g26851kZ ~]# echo $? 18 [root@iZ28g26851kZ ~]#
bash -x xxx.sh來執行腳本,該命令可將腳本執行的過程顯示出來
例:判斷文件是否存在
filetest.sh
[code]#!/bin/bash # FILENAME=/etc/passwd if [ -e $FILENAME ];then echo "文件存在" else echo "文件不存在" fi執行
[code][root@iZ28g26851kZ ~]# bash -x filetest.sh + FILENAME=/etc/passwd + '[' -e /etc/passwd ']' + echo $'\346\226\207\344\273\266\345\255\230\345\234\250' 文件存在 [root@iZ28g26851kZ ~]#這樣就可以很方便的檢查腳本了
[code][ string == string ]記住,[空格string空格==空格string空格]
少一個都不行哦~~
例:
[code][root@iZ28g26851kZ ~]# [ "asd" == "asdd" ] [root@iZ28g26851kZ ~]# echo $? 1 [root@iZ28g26851kZ ~]# [ "asd" == "asd" ] [root@iZ28g26851kZ ~]# echo $? 0 [root@iZ28g26851kZ ~]#
[code][ string != string ]
例:
[code][root@iZ28g26851kZ ~]# [ "asd" != "asd" ] [root@iZ28g26851kZ ~]# echo $? 1 [root@iZ28g26851kZ ~]# [ "asd" != "asdd" ] [root@iZ28g26851kZ ~]# echo $? 0 [root@iZ28g26851kZ ~]#