天天看點

Linux shell的條件判斷、循環語句及執行個體

shell條件判斷的兩個特殊裝置

/dev/null

  linux系統的空裝置,也稱為位桶,任何寫入其中的資料均會被丢棄當你不想将标準化輸出顯示或者儲存至檔案時可以将檔案從定向到/dev/null

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

  禁止标準化錯誤 rm $filename > /dev/null

/dev/zero

  Linux的輸入裝置,可以用他初始化檔案,可以無限制輸出0, 另一個作用是用0去填充一個指定大小的檔案

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

腳本位置參數:

 在linux中參數位置從指令後起依次往後,分别是0,1,2,3。。

 其中特殊變量有:

    $?: 指令的狀态結果;

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

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

    $$:腳本執行時所産生的程序

 shift [n]:代表輪替

Linux shell的條件判斷、循環語句及執行個體

與使用者互動:

    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 

      條件與條件一、二均不成立時需要輸入的内容

Linux shell的條件判斷、循環語句及執行個體

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隻搜尋相對一級路徑下的内容不對第二級子目錄進行分析      
Linux shell的條件判斷、循環語句及執行個體
Linux shell的條件判斷、循環語句及執行個體

(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--

Linux shell的條件判斷、循環語句及執行個體
[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;

控制變量的修正表達式

while :

    command

Linux shell的條件判斷、循環語句及執行個體

until 循環:

    until指令和while指令類似,while能實作的腳本until同樣也可以實作,但差別是until循環的退出狀态是不為0,退出狀态是為0(與while剛好相反),即whie循環在條件為真時繼續執行循環而until則在條件為假時執行循環。

文法格式:

until expression

Linux shell的條件判斷、循環語句及執行個體
[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 CONDITION; do

    .......

    if CONDITION2; then

        break [n]

    fi

[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]#      

    ......

        continue [n]

Linux shell的條件判斷、循環語句及執行個體

死循環:

while true; do

    循環體

    if CONDTION; then

        break

until false; do

    if CONDITION; then

Linux shell的條件判斷、循環語句及執行個體

while循環的特殊用法:

周遊檔案的每一行:

    while read VARIABLE; do

        循環體

    done < /PATH/FROM/SOME_FILE

Linux shell的條件判斷、循環語句及執行個體

for循環的特殊用法:

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

expr1: 定義控制變量,并初始指派;

expr2: 循環控制條件;

    進入條件:控制條件為“真”

繼續閱讀