Shell腳本(腳本中的邏輯判斷,邏輯判斷表達式,判斷文件和目錄屬性,case判斷)

邏輯判斷表達式:

-gt = 大於    -lt = 小於    -ge = 大於等於   -le = 小於等於   -eq = 恆等於  -ne = 不等於

這裏要注意空格

也可以用&&和||結合多個條件

例如1:

[root@congji shell]# cat if4.sh 

#/bin/bash

a=5

if [ $a -gt 4 ] && [ $a -lt 6 ]

then

   echo "4<a<6"

else

   echo nook

fi

[root@congji shell]# sh if4.sh 

4<a<6



一、Shell中的邏輯判斷

格式1:if條件;then語句;fi        (如果...然後...)

例如:

[root@congji shell]# cat if1.sh 

#/bin/bash

a=3

if [ $a -gt 1 ]

then

   echo ok

fi

結果:

[root@congji shell]# sh if1.sh 

ok


格式2:if條件;then語句;else語句;fi        (如果...然後...;不滿足條件...然後....)

示列:

[root@congji shell]# cat if2.sh 

#/bin/bash

a=1

if [ $a -gt 3 ]

then

   echo ok

else

   echo no ok

fi

結果:

[root@congji shell]# sh if2.sh 

nook


格式3:if...;then...;elif...;then...;else...;fi (如果...然後...;還有...然後...,不滿足條件...然後...)

(可以添加多個elif)

例如:

[root@congji shell]# cat if3.sh 

#/bin/bash

a=*

if [ $a -gt 6 ]

then

   echo "a > 3"

elif

   [ $a -lt 9 ]

then

   echo "< 9"

else

   echo no ok

fi


當a等於5時

[root@congji shell]# sh if3.sh 

< 9

當a等於7時

[root@congji shell]# sh if3.sh 

a > 3

所以當if滿足條件,elif不會執行


二、邏輯判斷表達式:

-gt = 大於    -lt = 小於    -ge = 大於等於   -le = 小於等於   -eq = 恆等於  -ne = 不等於

這裏要注意空格

也可以用&&和||結合多個條件

例如1:

[root@congji shell]# cat if4.sh 

#/bin/bash

a=5

if [ $a -gt 4 ] && [ $a -lt 6 ]

then

   echo "4<a<6"

else

   echo nook

fi

[root@congji shell]# sh if4.sh 

4<a<6



Shell中的邏輯判斷

格式1:if條件;then語句;fi        (如果...然後...)

例如:

[root@congji shell]# cat if1.sh 

#/bin/bash

a=3

if [ $a -gt 1 ]

then

   echo ok

fi

結果:

[root@congji shell]# sh if1.sh 

ok


格式2:if條件;then語句;else語句;fi        (如果...然後...;不滿足條件...然後....)

示列:

[root@congji shell]# cat if2.sh 

#/bin/bash

a=1

if [ $a -gt 3 ]

then

   echo ok

else

   echo no ok

fi

結果:

[root@congji shell]# sh if2.sh 

nook


格式3:if...;then...;elif...;then...;else...;fi (如果...然後...;還有...然後...,不滿足條件...然後...)

(可以添加多個elif)

例如:

[root@congji shell]# cat if3.sh 

#/bin/bash

a=*

if [ $a -gt 6 ]

then

   echo "a > 3"

elif

   [ $a -lt 9 ]

then

   echo "< 9"

else

   echo no ok

fi


當a等於5時

[root@congji shell]# sh if3.sh 

< 9

當a等於7時

[root@congji shell]# sh if3.sh 

a > 3

所以當if滿足條件,elif不會執行



三、判斷文件,目錄屬性

[-f file]判斷是否是普通文件,是否存在

例如:

[root@congji shell]# cat file1.sh 

#/bin/bash

f="/tmp/renxinyren"

if [ -f $f ]

then 

    echo $f exist

else

    touch $f 

    echo  "touch $f"

第一次執行:

[root@congji shell]# sh file1.sh 

touch /tmp/renxinyren

第二次執行:

[root@congji shell]# sh file1.sh 

/tmp/renxinyren exist


[-d file]判斷是否是普通目錄,是否存在

例如:

[root@congji shell]# cat file2.sh 

#/bin/bash

f="/tmp/renxinyren"

if [ -d $f ]

then 

    echo $f cunzai

else

    mkdir $f 

    echo  "mkdir $f"

fi

[root@congji shell]# sh file2.sh 

mkdir /tmp/renxinyren

[root@congji shell]# sh file2.sh 

/tmp/renxinyren cunzai


[-e file]只是判斷文件或者目錄是否存在

[root@congji shell]# cat file3.sh 

#/bin/bash

f="/tmp/renxinren"

if [ -e $f ]

then 

    echo $f cunzai

else

    echo $f bucunzai

fi

[root@congji shell]# sh file3.sh 

/tmp/renxinren bucunzai


[ -r $f ] [ -w $f ] [ -x $f ]分別表示辨別一個文件是否可讀,可寫,可執行

[root@congji shell]# ll /tmp/rxr 

-rw-r--r-- 1 root root 0 1月  11 15:16 /tmp/rxr

[root@congji shell]# cat file4.sh 

#/bin/bash

f="/tmp/rxr"

if [ -r $f ]

then 

    echo $f yes

else

    echo $f no

fi

[root@congji shell]# sh file4.sh 

/tmp/rxr yes

修改爲[-w $f]

[root@congji shell]# vim file4.sh 

[root@congji shell]# sh file4.sh 

/tmp/rxr yes

修改爲[-x $f]

[root@congji shell]# vim file4.sh 

[root@congji shell]# sh file4.sh 

/tmp/rxr no


四、case判斷

我們在介紹case這個命令之前,先解釋一個read -p命令。

我們先用命令行來測試一下這個命令。

[root@congji ~]# read -p "Please input a number: " n

Please input a number: 123

[root@congji ~]# echo $n

123


通過上面的實驗我們可以發現,read -p 可以和用戶實現一個交互,並賦給變量一個值。


刪除筆記修改筆記

我們等會寫一個關於case的腳本。我們把它分成2部分來解析。首先看第一部分:

#/bin/bash

read -p "Please input a number: " n

if [ -z "$n" ]

then

    echo "Please input a number."

    exit 1

fi

首先,我們讓用戶輸入一個數字,-z表示,如果變量爲空,那麼會返回一個Please input a number的字符串,並且exit退出,=。

還記得我們編譯時,如果失敗了,當我們用echo !$查詢時,發現返回值爲1,這裏的1就是這個意思。


n1=`echo $n|sed 's/[0-9]//g'`

if [ -n "$n1" ]

then

 echo "Please input a number."

 exit 1

fi


如果用戶輸入的值不爲空,那麼跳入這一步,首先會把用戶輸入的變量拿出來,做一個過濾,sed命令把所有數字全部清空,-n表示如果sed清空數字後,字符不爲空,則表示用戶輸入了一個不是數字的字符,則會返回,Please input a number!,這裏加一個!和上面的做區分。


執行結果:

[root@congji shell]# sh case1.sh 

Please input a number: 

Please input a number.


[root@congji shell]# sh case1.sh 

Please input a number: ds1

Please input a number!!

第二部分:使用了if...then...;elif...then...;eles....

如果變量是n大於等於0,小於等於60,則變量tag=1。

如果變量n大於等於60,小於等於80,則變量tag=2。

如果變量n大於等於80,小於等於90,則變量tag=3。

如果變量n大於等於90,小於等於100,則變量tag=4。


if [ $n -lt 60 ] && [ $n -ge 0 ]                 

then

    tag=1

elif [ $n -ge 60 ] && [ $n -lt 80 ]

then

    tag=2

elif [ $n -ge 80 ]  && [ $n -lt 90 ]

then

    tag=3

elif [ $n -ge 90 ] && [ $n -le 100 ]

then

    tag=4

else

    tag=0

fi


第三部分,就是我們要說的case循環了.注意格式,case 變量 in ,1)...;; 2)...;; 3)...;;,最後結尾用esac,我們也可以|來表示並列,例如,3|4),就是當變量等於3或者4時,返回下面的命令。


當變量tag=1時,返回not ok

當變量tag=2時,返回ok

當變量tag=3時,返回ook

當變量tag=4時,返回oook

當變量等於其他時,說明用戶輸入的值不在這個範圍內,則返回值"The number range is 0-100."

case $tag in

    1)

        echo "not ok"

        ;;

    2)

        echo "ok"

        ;;

    3)

        echo "ook"

        ;;

    4)

        echo "oook"

        ;;

    *)

        echo "The number range is 0-100."

        ;;

esac


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章