Linux shell的條件判斷、循環語句及實例

shell條件判斷的兩個特殊設備linux

/dev/nullshell

  linux系統的空設備,也稱爲位桶,任何寫入其中的數據均會被丟棄當你不想將標準化輸出顯示或者保存至文件時能夠將文件從定向到/dev/null
express

  禁止標準化輸出 cat $filename > /dev/null
bash

  禁止標準化錯誤 rm $filename > /dev/nullide

/dev/zero函數

  Linux的輸入設備,能夠用他初始化文件,能夠無限制輸出0, 另外一個做用是用0去填充一個指定大小的文件測試

在條件判斷語句中&&表示and ||表示or spa

腳本位置參數:
blog

 在linux中參數位置從命令後起依次日後,分別是0,1,2,3。。進程

 其中特殊變量有:

    $?: 命令的狀態結果;

    $#: 傳遞給腳本或函數的參數的個數;

$*和$@: 引用傳遞給腳本或函數的參數列表;

    $$:腳本執行時所產生的進程

 shift [n]:表明輪替

 wKioL1X7piOj9GodAAMn3rOgScg629.jpg

與用戶交互:

    read 用於讀取來自鍵盤的變數

 格式: read [-pt] value

    -p:後面直接跟提示字符

    -t:後面直接接等待的時間『秒數』

[root@iZ28qzns9m4Z bashtest]# echo $a test
whoaaaaa test
[root@iZ28qzns9m4Z bashtest]# read -p "input:" -t 5 a
input:aaaaa
[root@iZ28qzns9m4Z bashtest]# echo $a
aaaaa
[root@iZ28qzns9m4Z bashtest]#

命令引用

     格式一: `命令`

     格式二:$(命令)

條件判斷語句 if,then,case

  只有一個判斷式的語句格式:

    if[條件];then

     命令  ==> 當條件爲真時執行,若不僅一條時用換行符隔開

     fi

  須要進行判斷時:

    if [條件];then

       條件成立時,須要輸入的內容

     elif [條件二];then

       條件成立時,須要輸入的內容

    else 

      條件與條件1、二均不成立時須要輸入的內容

     fi

wKiom1X7l9eyQsG8AAKdU20_sRM359.jpg

case的判斷結構也能夠用於多分支:

  語法格式:

    case $變量名稱 in

    "第一變量內容")command命令;;

    "第二變量內容")command命令;;

    "第三變量內容")command命令;;

    "第四變量內容")command命令;;

    ...

    *)command命令;;===》在以上條件均不匹配的條件下執行

    esac:

循環語句:for while until 

在linux 循環語句中 list 是一個重 點,他負責循環時所須要的列表元素,是由一個或多個空格或換行符分隔開的字符串組成,把列表的每一個字符串逐個賦值給VARIABLE表示的變量;

生成格式:

        數字:① list="1 2 3 4 5 6 10"  ==》 for var in ${list}
                  ② for var in {1..10}

[root@iZ28qzns9m4Z bashtest]# cat 1for.sh 
#!/bin/bash
#
#list="1 2 3 4 5 6 10"  #第一種
#for i in ${list}
#do
#    echo $i
#done
===================================
for i in {1..10}   #第二種
do
    echo $i
done

[root@iZ28qzns9m4Z bashtest]#

        (2) 直接給出列表
          (3) glob

    #!/bin/bash
    #
    for filename in /相對具體的路徑/*; do
        file $filename
    done
    注:若是不是相對具體的路徑,那麼腳本會報錯,filename只搜索相對一級路徑下的內容不對第二級子目錄進行分析

wKiom1X8Fp3iJHSXAAHEyQtz2ao252.jpg

wKiom1X8FeLCn9P4AAEUpXF1PKw863.jpg

(4) 命令生成

算術運算:

+, -, *, /, %, **


(1) $[$A+$B]

(2) $(($A+$B))

(3) let VARIABLE=$A+$B

(4) VARIABLE=$(expr $A + $B)

加強型賦值:

+=

sum=$[$sum+$i]

let sum+=$i

-=, *=, /=, %=


let count=$[$count+1]   --> let count+=1 --> let count++

let count=$[$count-1] --> let count-=1 --> let count--

wKiom1X8KLyic9pyAAFRd2x5Z6w221.jpg

[root@iZ28qzns9m4Z bashtest]# sh 4for-2.sh 
2500
[root@iZ28qzns9m4Z bashtest]# cat 4for-2.sh 
#!/bin/bash
sum=0
for i in $(seq 1 2 100)
do
	let "sum+=i"
done
echo $sum
[root@iZ28qzns9m4Z bashtest]#
for 運行前測試語句,用於建立重複循環

        格式: for var in ${list} 

               do

                 循環命令

              done

不帶列表的for循環

 格式: for var

      do

       循環命令

    done

while循環:

while CONDTION; 

do

循環體

done

進入條件:當CONDITION爲「真」;

退出條件:當CONDITION爲「假」;

while CONDITION;

do

循環體

控制變量的修正表達式

done

while :

do

    command

done

wKiom1X8L67BNY-PAAHeES1EXC4666.jpg

until 循環:

    until命令和while命令相似,while能實現的腳本until一樣也能夠實現,但區別是until循環的退出狀態是不爲0,退出狀態是爲0(與while恰好相反),即whie循環在條件爲真時繼續執行循環而until則在條件爲假時執行循環。

語法格式:

until expression

do

    command

done

wKiom1X87V2SQtPDAADij_jjRPI272.jpg

[root@iZ28qzns9m4Z bashtest]# cat 1until.sh 
#!/bin/bash
declare -i sum=0
declare -i i=1
until [[ "$i" -gt 10 ]]
do
	let sum+=i
	let i++
done
echo $sum
[root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh 
+ declare -i sum=0
+ declare -i i=1
+ [[ 1 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 2 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 3 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 4 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 5 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 6 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 7 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 8 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 9 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 10 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 11 -gt 10 ]]
+ echo 55
55
[root@iZ28qzns9m4Z bashtest]#

循環控制:

continue [n]:提早結束本輪循環,而直接進入下一輪;

break [n]:提早結束循環;


while循環:

while CONDITION; do

    .......

    if CONDITION2; then

        break [n]

    fi

done

[root@iZ28qzns9m4Z bashtest]# cat 1until.sh 
#!/bin/bash
declare -i sum=0
declare -i i=1
until [[ "$i" -gt 10 ]]
do
	let sum+=i
	let i++
if [ $i -eq 5 ]; then
   break
fi
echo $sum
done
[root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh 
+ declare -i sum=0
+ declare -i i=1
+ [[ 1 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 2 -eq 5 ']'
+ echo 1
1
+ [[ 2 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 3 -eq 5 ']'
+ echo 3
3
+ [[ 3 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 4 -eq 5 ']'
+ echo 6
6
+ [[ 4 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 5 -eq 5 ']'
+ break
[root@iZ28qzns9m4Z bashtest]#

while CONDITION; do

    ......

    if CONDITION2; then

        continue [n]

    fi

    ......

done

wKiom1X886qRcGnTAAI90JruBr0002.jpg

死循環:

while true; do

    循環體

    if CONDTION; then

        break

    fi

done


until false; do

    循環體

    if CONDITION; then

        break

    fi

done

wKioL1X8-vbidepYAAZVO0-2Q2M235.jpg

while循環的特殊用法:

遍歷文件的每一行:

    while read VARIABLE; do

        循環體

    done < /PATH/FROM/SOME_FILE

wKiom1X9CWPjqzanAAI0UlajyxU354.jpg

for循環的特殊用法:

for ((expr1;expr2;expr3)); do

    循環體

done


expr1: 定義控制變量,並初始賦值;

expr2: 循環控制條件;

    進入條件:控制條件爲「真」

    退出條件:控制條件爲「假」

expr3: 修正控制變量

wKiom1X9CqHAqxTRAAEoVdbF9tg334.jpg

相關文章
相關標籤/搜索