一、問題
1.1、環境
電腦環境:Windows 10;
JDK環境: Jdk1.8;
Docker版本:Server Version: 19.03.3
1.2、問題
在Shell腳本語句中,我們肯定會遇到條件判斷,那麼shell的條件判斷該如何編寫呢?
二、解答
2.1、數值判斷;
格式:
if ((條件1));then
執行語句1
elif ((條件2));then
執行語句2
else
不滿足條件
fi
1、正確實例:
#!/bin/bash
NUM=$1
if (($NUM >10));then
echo "this number($NUM) is bigger than 10"
else
echo "this number($NUM) is not bigger than 10"
fi
正確實例截圖:
2、錯誤實例
#!/bin/bash
NUM=$1
if [[ $NUM > 10 ]] ; then
echo "this number($NUM) is bigger than 10!"
else
echo "this number($NUM) is smaller than 10!"
fi
錯誤實例的截圖:
我們得出了完全相反的結論,然而,根據常識,我們明顯知道,9不可能大於10的;那麼,問題出在哪裏呢?原來,雙方括號【[[ 條件 ]]】如果要比較大小,必須使用轉義的大魚號,小於號,等於號;如上圖中,不能直接使用大於號,而應該講大於號換成【-gtl】;並且,雙中括號內側必須兩內側邊空格,否則會報錯;但是,如果使用雙小括號,就可以不用空格,更簡單明瞭;
將上面的語句改成下面的樣子即可:
關於小括號和中括號的用法,可以看下面的總結;
2.2、目錄是否存在
目錄的判斷需要使用中括號,中括號裏的邏輯運算符,可以總結如下:
- -f:判斷文件是否存在;
- -d:判斷目錄是否存在;
- -eq:等於,整數比較;
- -ne:不等於,整數比較;
- -lt:小於;
- -gt:大於;
- -le:小於或等於;
- -ge:大於或等於;
- -a:and,表示並的關係;
- -o:or,或者,表示並的關係;
- -z:空字符串;
- !:非;
實例:
如果目錄不存在,則創建目錄;
#!/bin/bash
#create by tzc at 2019-12-23 22:59:49
if [ ! -d /tmp ];then
mkdir -p /tmp
else
echo "this director is already exit!"
fi
注意感嘆號和-d之間有空格!!!
2.3、測試腳本是否正確
格式:
/bin/bash -n fileExist.sh
如果沒有問題,則會沒有任何提示:
如果有問題,則:
(我這裏多打了一箇中括號);但是,這個方法只能檢查格式錯誤,不能檢查其他的錯誤,立刻如,如果我把中括號那裏換成了1,則不會報錯;
2.4、分數判斷實例:
#!/bin/bash
SCORES=$1
if [ -z $SCORES ];then
echo "Usage:{please input a number betweent 0 to 100}"
exit
fi
if [[ $SCORES -gt 90 ]];then
echo "優秀";
elif [[ $SCORES -gt 80 ]];then
echo "良好";
elif [[ $SCORES -gt 60 ]];then
echo "及格";
else
echo "不及格!"
fi
截圖:
2.5、注意
1、小括號可以使用>,<,=;並且括號內外可以沒有空格;
2、中括號括號內側必須要有空格;
3、中括號不可以使用<,>,=;而必須使用轉義的邏輯判斷條件;
4、賦值號前後不能有空格;
本篇說明內容完畢;
三、總結
歡迎關注我的
CSDN博客: https://blog.csdn.net/River_Continent
微信公衆號:幕橋社區
知乎:張牧野, https://www.zhihu.com/people/zhang-mu-ye-37-76/activities
簡書: https://www.jianshu.com/u/02c0096cbfd3