shell腳本從入門到復雜六(條件判斷和算數運算)
分類:
條件測試類型
數值測試
字符串測試
文件測試
1、條件測試的表達式
格式:
[ expression ]
[[ expression ]]
test expression
2、數值測試
參數 | 說明 |
-eq | 等於則為真 |
-ne | 不等於則為真 |
-gt | 大於則為真 |
-ge | 大於等於則為真 |
-lt | 小於則為真 |
-le | 小於等於則為真 |
案例1:
判斷當前系統上是否有用戶的默認shell為bash;如果有,就顯示有多少個這類用戶;否則,就顯示沒有這類用戶
# vi determine1.sh
num = `awk -F: '($7=="/bin/bash" {print $0})' /etc/passwd | wc -l`
if [[ $num -gt 0 ]];then
echo "system sum $num user have /bin/bash"
else
echo "system no user have /bin/bash"
fi
註意[[]]裏邊的內容要和中括號之間要有空格
案例2:
給定一個用戶,判斷用戶id和組id是否相同
# vi determine2.sh
#!/bin/bash
read -p "Enter username: " name
userid=`id -u $name`
groupid=`id -g $name`
if [ $userid -eq $groupid ];then
echo "Yes,is some"
else
echo "No,is defferent"
fi
3、字符串測試
參數 | 說明 |
= | 等於則為真 |
!= | 不相等則為真 |
-z 字符串 | 字符串的長度為零則為真 |
-n 字符串 | 字符串的長度不為零則為真 |
案例:
給定兩個字符串,判斷兩個字符串是否一樣
# determine3.sh
#!/bin/bash
read -p "Enter two string: " str1 str2
if [ $str1 = $str2 ];then
echo "The two string is same"
else
echo "The two string is defferent"
fi
4、文件測試
參數 | 說明 |
-e 文件名 | 如果文件存在則為真 |
-r 文件名 | 如果文件存在且可讀則為真 |
-w 文件名 | 如果文件存在且可寫則為真 |
-x 文件名 | 如果文件存在且可執行則為真 |
-s 文件名 | 如果文件存在且至少有一個字符則為真 |
-d 文件名 | 如果文件存在且為目錄則為真 |
-f 文件名 | 如果文件存在且為普通文件則為真 |
-c 文件名 | 如果文件存在且為字符型特殊文件則為真 |
-b 文件名 | 如果文件存在且為塊特殊文件則為真 |
案例:
給定一個文件名,判斷文件是否存在
# vi determine4.sh
#!/bin/bash
read -p "Enter filename: " name
if [ -e $name ];then
echo "file is exits"
else
echo "file is not exits"
fi
5、關系符
另外,Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操作符用於將測試條件連接起來,其優先級為:"!"最高,"-a"次之,"-o"最低。
案例:
判斷參數個數是否大於1且小於3
if [ $# -gt 1 -a $# -le 3 ]
參數個數是否大於1或者小於3
if [ $# -gt 1 ] && [ $# -le 3 ]
二、算數運算
運算符 | 說明 | 舉例 |
+ | 加法 | `expr $a + $b` 結果為 30 |
- | 減法 | `expr $a - $b` 結果為 10 |
* | 乘法 | `expr $a \* $b` 結果為 200 |
/ | 除法 | `expr $b / $a` 結果為 2 |
% | 取余 | `expr $b % $a` 結果為 0 |
= | 賦值 | a=$b 將把變量 b 的值賦給 a |
== | 相等。用於比較兩個數字,相同則返回 true | [ $a == $b ] 返回 false |
!= | 不相等。用於比較兩個數字,不相同則返回 true | [ $a != $b ] 返回 true |
案例 求和:
賦值有多種方法
num1=5
num2=6
1) let算術表達式
let sum=$num1+$num2
2) $[算術表達式]
sum=$[$num1+$num2]
3) $(())
sum=$(($num1+$num2))
4) expr 算術表達式,表達式中各操作數及運算符之間要有空格,而且要使用命令引用
sum=`expr $num1+$num2`
shell腳本從入門到復雜六(條件判斷和算數運算)