68.if邏輯判斷以及判斷文件目錄屬性 if特殊用法 case判斷

20.5 shell腳本中的邏輯判斷linux

20.6 if判斷文件目錄屬性shell

20.7 if判斷特殊用法bash

20.8/20.9 case判斷命令行

 

 

 

 

 

20.5 shell腳本中的邏輯判斷:input

 

 

 

在shell腳本里,-gt爲大於,-lt爲小於,-eq爲等於,-ne爲不等於,-ge爲大於等於,it

-le爲小於等於基礎

~1.格式1:if 條件 ; then 語句; fi變量

#最多見的格式,if(若是怎麼怎麼樣)...;then(而後怎麼怎麼樣)...;fi(與前面的if相對應的)sed

[root@axinlinux-01 shell]# a=5 #假如a=5file

[root@axinlinux-01 shell]# if [ $a -gt 3 ] #命令行下能夠分開這樣寫。假如a大於3的時候

> then #而後

> echo ok #輸出ok

> fi #fi 表示結束

ok #回車後就是ok。由於咱們假如a=5了,已經知足上面條件了

[root@axinlinux-01 shell]# if [ $a -gt 3 ]; then echo ok; fi #寫完上面的,按上一條命令就顯示這個。這就是一整條命令行的寫法,輸出爲ok

ok

#! /bin/bash #在腳本里能夠這樣寫

a=1

if [ $a -gt 3 ]

then

echo ok

fi

 

~2.格式2:if 條件; then 語句; else 語句; fi

#if(若是怎麼樣);then(而後怎麼樣);else(不知足if的判斷,怎麼樣);fi

#! /bin/bash

a=1

if [ $a -gt 3 ]

then

echo ok

else #若是不知足if的邏輯判斷,怎麼樣

echo no #不知足就輸出no

fi

 

~3.格式3:if …; then … ;elif …; then …; else …; fi

#elif 表示在知足if的基礎之上,elif還知足什麼什麼。也就是又加了一個條件判斷。能夠寫屢次

#! /bin/bash

a=5

if [ $a -gt 10 ] #假如a大於10,而後輸出>10

then

echo ">10"

elif [ $a -lt 4 ] #假如a小於4,而後輸出>10 $$ <4

then

echo "<10 && >4"

else #以上都不知足,就輸出no

echo no

fi

以上很明顯都不知足,就輸出no

~4.邏輯判斷表達式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意處處都是空格

若是咱們就想用<>來表示大於或小於,能夠這樣寫:

[root@axinlinux-01 shell]# a=3

[root@axinlinux-01 shell]# if ((a<5)) ; then echo ok ; fi #就是用兩個括號括起來

ok

 

~5.可使用 && || 結合多個條件

if [ $a -gt 5 ] && [ $a -lt 10 ]; then

#而且關係的時候能夠用&&來表示

if [ $b -gt 5 ] || [ $b -lt 3 ]; then

#或者關係的時候能夠用||來表示

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

20.6 if判斷文件目錄屬性:

 

 

 

 

 

~1.[ -f file ]判斷是不是普通文件,且存在

#! /bin/bash

f=/tmp/axin

if [ -f $f ] #判斷$f是不是文件

then #是的話,輸出 $f exist

echo $f exist

else #不是的話,touch$f

touch $f

if

~2.[ -d file ] 判斷是不是目錄,且存在

#! /bin/bash

f=/tmp/axin

if [ -d $f ] #判斷$f是否爲目錄

then #是的話echo $f exist

echo $f exist

else #不是的話mkdir $f

touch $f #無論是文件仍是目錄都是能夠touch的。若是存在的話touch就會改變他的time

fi

~3.[ -e file ] 判斷文件或目錄是否存在

~4.[ -r file ] 判斷文件是否可讀

~5.[ -w file ] 判斷文件是否可寫

~6.[ -x file ] 判斷文件是否可執行

 

 

實例:

一般咱們會用到

#! /bin/bash

f=/tmp/axin

[ -f $f ] && rm-rf $f #這一行的效果等同於下面四行的效果(前面的執行成功才執行後面的)

if [-f $f]

then

rm-rf $f

fi

 

[ -f $f ] || touch $f #這一行的效果等同於下面四行的效果(前面的執行不成功才執行後面的)

if [ ! -f $f] #方括號里加!表明去反的意思

then

touch $f

fi

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

20.7 if判斷的特殊用法:

 

 

 

 

~1.if [ -z "$a" ]  這個表示當變量a的值爲空時會怎麼樣

#若是是變量要用雙引號。若是是文件就不用雙引號

~2.if [ -n "$a" ] 表示當變量a的值不爲空

#若是是變量要用雙引號。若是是文件就不用雙引號

~3.if grep -q '123' 1.txt; then  表示若是1.txt中含有'123'的行時會怎麼樣

#-q只作過濾,不顯示結果

[root@axinlinux-01 shell]# if grep -wq 'user1' /etc/passwd; then echo "yes"; else echo "no"; fi

no

~4.if [ ! -e file ]; then 表示文件不存在時會怎麼樣

#-e爲是否存在,加上!表明取反,爲不存在

~5.if (($a<1)); then …等同於 if [ $a -lt 1 ]; then…

#要想使用大於等於這樣的字符,要加上雙括號

~6.[ ] 中不能使用<,>,==,!=,>=,<=這樣的符號

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

 

20.8/20.9 case判斷:

 

 

 

 

~1.格式

case  變量名 in  #好比case $a in

value1) #當值爲1的時候怎麼樣

command

 ;; #雙分號表示上面的判斷結束進入下面的判斷

value2)

command

 ;;

*) #除此以外又怎麼樣

command

;;

esac

~2.在case程序中,能夠在條件中使用|,表示或的意思, 好比    

2|3)

   command

   ;;

~3.腳本案例

需求:當咱們輸入一個數字(0-100),判斷這個同窗的分數是什麼樣的級別(優秀、及格或不及格)

#!/bin/bash

read -p "Please input a number: " n #做爲與用戶交互,用戶輸入什麼,那麼那就是什麼。首先咱們要捕獲這個數字。也一樣定義了n這個變量

if [ -z "$n" ] #這個變量爲空的時候。也就是用戶沒有輸入的時候

then

echo "Please input a number." #沒有輸入直接回車了,就輸出「請輸入一個數字」

exit 1 #而後退出。這個1表示咱們echo $?的值。就是說當客戶爲空直接回車,再使用echo $?的時候就會顯示1

fi

 

n1=`echo $n|sed 's/[0-9]//g'` #ni=用戶輸入的匹配出除了數字的東西。假如用戶輸入了99ww,那麼匹配出99,就過濾出了ww

if [ -n "$n1" ] #若是不爲空怎麼怎麼樣。(不爲空的話確定是帶有非法字符啊,由於上一條已通過濾出除數字的了,依上一條就會顯示ww)

then

echo "Please input a number." #若是出現除數字的字符,就顯示「請輸入數字」

exit 1

fi #這一段的意思是過濾數除數字的字符,並顯示「Please input a number."

 

if [ $n -lt 60 ] && [ $n -ge 0 ] #輸入的數字小於60而且大於等於0的時候

then

tag=1 #tag1爲一個變量,下面咱們會用case來定義它

elif [ $n -ge 60 ] && [ $n -lt 80 ] #輸入的數字大於等於60而且小於80的時候

then

tag=2

elif [ $n -ge 80 ] && [ $n -lt 90 ] #輸入的數字大於等於80而且小於90的時候

then

tag=3

elif [ $n -ge 90 ] && [ $n -le 100 ] #輸入的數字大於等於90而且小於100的時候

then

tag=4

else #以上都不知足的時候

tag=0

fi

case $tag in #咱們來定義tag的值

1) #當tag的值爲1的時候,顯示"not ok"

echo "not ok"

;;

2) #當tag的值爲2的時候,顯示"ok"

echo "ok"

;;

3) #當tag的值爲3的時候,顯示"ok ok"

echo "ok ok"

;;

4) #當tag的值爲1的時候,顯示"ok ok ok"

echo "ok ok ok"

;;

*) #除此以外的。就是當tag都不符合1 2 3 4 的時候。就是上面定義的tag=0

echo "The number range is 0-100." #接上條,顯示"The number range is 0-100."

;;

esac

相關文章
相關標籤/搜索