Shell中for,while,until循環語句用法及8道案例練習

目錄
一、for循環語法
二、while循環語法
三、until循環語法
四、8道案例練習
五、知識點總結
1、循環語句for,while,until用法
2、if 條件判斷 (文件、整數、字符串、多重條件判斷)
3、四則運算

前言:網上關於數據類的shell案例我找到的很少,網上的shell案例更多是運維方向的。自己現在還是shell學習階段,以後會多整理數據開發、ETL開發中如何運用shell腳本,目前文章更多是shell中某一個語法。

循環語句:Bash Shell中主要提供了三種循環方式:for、while和until。
首先我們先看這三種循環的語法。

一、for循環語法

列表for循環:用於將一組命令執行已知的次數

語法一:
for variable in {list}   #variable 變量
     do
          command     #command 命令行
          command
          …
     done
語法二:
for variable in a b c
     do
         command
         command
     done
# for var in 1 2 3 4 5;do echo $var;done
語法三:
類C風格的for循環
for(( expr1;expr2;expr3 ))
    do
        command
        command
        …
    done
#expr1:定義變量並賦初值
#expr2:決定是否進行循環(條件)
#expr3:決定循環變量如何改變,決定循環什麼時候退出

舉例
# for ((i=1;i<=5;i++));do echo $i;done
# for ((i=1;i<=10;i+=2));do echo $i;done
# for ((i=2;i<=10;i+=2));do echo $i;done

二、while循環語法

特點:條件爲真就進入循環;條件爲假就退出循環

i=1
while expression  #expression表達式,eg:[ 1 -eq 1 ]  (( 1 >= 1 ))
#while首先進行條件測試,如果條件測試爲真,則進入循環,執行命令區域,否則不進入循環
do
    command
    command
done

舉例
i=1
while [ $i -le 5 ]  #當變量i小於5時,執行下面的循環體中的命令
do
    echo $i
    let i++
done

三、until循環語法

特點:條件爲假就進入循環;條件爲真就退出循環

until expression  #expression表達式,eg:[ 1 -eq 1 ]  (( 1 >= 1 ))
    do
        command
        command
        ...
    done

舉例
i=1
until [ $i -gt 5 ] #gt大於,當變量i大於5不成立的時候,執行下面的循環體中的命令
do
    echo $i
    let i++
done

四、案例練習

練習題
1、用for循環/home/study/study_shell目錄下創建aaa1-aaa10,然後在aaa1-aaa10創建bbb1-bbb10的文件
2、使用for循環、while循環計算100以內的偶數和
3、使用for循環打印99乘法表
4、使用while循環打印9
9乘法表
5、使用for循環計算100以內的奇數和
6、使用while循環計算100以內的奇數和
7、使用類C風格的 for循環計算100以內的奇數和
8、判斷所輸整數是否爲質數

1、用for循環/home/study/study_shell目錄下創建aaa1-aaa10,然後在aaa1-aaa10創建bbb1-bbb10的文件

#!/bin/bash
#path:/home/study/study_shell
#1、用for循環在/home/study/study_shell目錄下創建aaa1-aaa10目錄
#2、然後在aa1-aaa10創建bbb1-bbb10的目錄(在aaa1目錄中創建bbb1-bbb10的文件,在aaa2目錄中創建bbb1-bbb10的文件)

for i in `seq 10`
do
    mkdir /home/study/study_shell/aaa$i
    cd /home/study/study_shell/aaa$i
    for j in `seq 10`
        do
        touch bbb$j
        done
done
說明:

(1)seq 用於產生從某個數到另外一個數之間的所有整數

2、使用for循環、while循環計算100以內的偶數和

2.1、for循環計算100以內的偶數和
#!/bin/bash
#使用for循環計算100以內的偶數和
sum=0
for i in {1..100}
do
    if [ $[$i%2] -eq 0 ];then #eq等於,%取餘
        sum=$[$sum+$i]
    fi
done
echo "100以內的偶數和爲${sum}"
說明:

(1){1..100}會生成一個空格分隔的數字序列字符串
(2)if [ $[$i%2] -eq 0 ],條件判斷之判斷整數,當變量除以2的餘數等於0成立時,執行下面的步驟

條件判斷語法
語法1: test 條件表達式  
#test -e file   只要文件存在條件爲真

語法2: [ 條件表達式 ]   
#[ $[id -u] -eq 0 ] 
#[ $[$i%2] -eq 0 ]

語法3: [[ 條件表達式 ]] 支持正則 =~

語法4:類C風格的數值比較
#(($[$a%2]==0));echo $?

參考文檔:黑馬程序員課件___條件判斷 (文件、整數、字符串、多重條件判斷)
(3)[$i%2]、[$sum+$i],四則運算。

四則運算語法:
語法1: $(( )) 
#echo $((1+1))或者a=$((1+1))

語法2:$[ ]    
#echo $[10-5]或者a=$[10-5]

語法3:expr    
#expr 10 / 5

語法4:let 
#n=1;let n+=1 等價於 let n=n+1
2.2、while循環計算100以內的偶數和
#!/bin/bash
#使用while循環計算100以內的偶數和
i=1
sum=0
while [ $i -lt 101 ]
do
    if [ $[$i%2] -eq 0 ];then
        sum=$[$sum+$i]
    fi
    let i+=1 
       #let i+=1 等於let n=n+1
done
echo "100以內的偶數和爲${sum}"

3、使用for循環打印9*9乘法表

#!/bin/bash
#使用for循環打印9*9乘法表
for i in `seq 9`
do
    for j in `seq $i`
    do
        echo -n "$j*$i=$[$j*$i]   "
        #echo -n 不換行輸出
    done
    echo
done
說明

(1)echo -n 不換行輸出
(2)單獨一個echo,作用是換行

4、使用while循環打印9*9乘法表

#!/bin/bash
#使用while循環打印9*9乘法表
i=1
while [ $i -le 9 ]
do
    j=1
    while [ $j -le $i ]
    do
        echo -n "$j*$i=$[$j*$i]   "
        let j++
    done
    let i++
    echo
done
說明

(1)let j++等於let n=n+1

5、使用for循環計算100以內的奇數和

#!/bin/bash
#使用for循環計算100以內的奇數和
sum=0
for i in {1..100..2}
do
    let sum=sum+i
done
echo "100以內的奇數和爲:${sum}"
說明:

(1) {1..100..2} 用於產生從1到100之間的所有整數,整數之間的間隔是2
(2)let sum=sum+i四則運算

6、使用while循環計算100以內的奇數和

#!/bin/bash
#使用while循環計算100以內的奇數和
i=1
sum=0
while [ $i -le 100 ]
do
    if [ $[$i%2] -eq 1 ];then
    sum=$[$sum+$i]
    fi
    let i++
done
echo "100以內的奇數和爲:${sum}"
感想:

這個代碼看着就6行,挺簡單的,但寫的時候改了5個地方纔能正常運行。就像SQL一樣看着很簡單,但在實際業務過程中會遇見很多問題。還是要多多練習。

7、使用類C風格的 for循環計算100以內的奇數和

類C風格的for循環語法:
for(( expr1;expr2;expr3 ))
    do
        command
        command
        …
    done
#expr1:定義變量並賦初值
#expr2:決定是否進行循環(條件)
#expr3:決定循環變量如何改變,決定循環什麼時候退出

舉例
# for ((i=1;i<=5;i++));do echo $i;done
# for ((i=1;i<=10;i+=2));do echo $i;done
# for ((i=2;i<=10;i+=2));do echo $i;done

練習

#!/bin/bash
#使用類C風格的for循環計算100以內的奇數和

sum=0
for ((i=1;i<=100;i+=2))
do
    let sum=sum+i
done
echo "100以內的奇數和爲:${sum}"

8、判斷所輸整數是否爲質數

#!/bi /bash
#判斷所輸整數是否爲質數
#質數除了本身和1以外並沒有任何其他因子
#質數表:2 3 5 7 11 13 17 19 23 29

read -p  "請輸入一個正整數:" number
if [ $number -eq 1 ];then
    echo "${number}不是質數"
elif [ $number -eq 2 ];then
    echo "${number}是質數"
else
    for i in `seq 2 $[$number-1]`
    do
    if [ $[$number%$i] -eq 0 ];then
    echo "${number}不是質數"
    exit
    fi
    done
    echo "${number}是質數"
fi

說明:

(1)if語法結構

語法一:if...else結構
if [ condition ];then
        command1
    else
        command2
fi

語法二:if...elif...else結構
if [ condition1 ];then
        command1    結束
    elif [ condition2 ];then
        command2    結束
    else
        command3
fi

五、知識點總結

1、循環語句for,while,until用法

文章位置:所有內容都涉及

2、 if 條件判斷 (文件、整數、字符串、多重條件判斷)

文章位置:四、案例練習___8、判斷所輸整數是否爲質數
文章位置:四、案例練習___2、使用for循環、while循環計算100以內的偶數和
文章位置:四、案例練習___6、使用while循環計算100以內的奇數和
參考文檔:黑馬程序員課件___條件判斷 (文件、整數、字符串、多重條件判斷)

3、四則運算

文章位置:四、案例練習___2、使用for循環、while循環計算100以內的偶數和

4、感想

shell語法真的很亂,比如條件判斷就有4中語法,並且數字和文件的條件判斷語法還不是一樣的.關於if條件判斷,for循環,以及四則運算在文章中都涉及了.以後在工作中如果遇見相應的問題在看這篇文章總結把

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