shell編程中的三種流程控制

流程控制

v 一 、過程式編程語言:

1.順序執行

2.選擇執行

3.循環執行

 條件選擇if 語句

  選擇執行:

  注意: :if 語句可 嵌套

   單分支

if 判斷條件;then

條件為真的分支代碼

fi

   雙分支

if 判斷條件; then

條件為真的分支代碼

else

條件為假的分支代碼

fi

   多分支

if CONDITION1 ; then

if-true

elif CONDITION2 ; then

if-ture

elif CONDITION3 ; then

if-ture

else

all-false

fi

逐條件進行判斷,第一次遇為“真”條件時,執行其分支,

而后 結束整個if 語句

 if 實例

 根據命令的退出狀態來執行命令

if ping -c1 -W2 station1 &> /dev/null; then

echo 'Station1 is UP'

elif grep "station1" ~/maintenance.txt &> /dev/null

then

echo 'Station1 is undergoing maintenance

else

echo 'Station1 is unexpectedly DOWN!'

exit 1

fi 

條件判斷:case

case 用 變量引用 in           

PAT1)

分支1

;;

PAT2)

分支2

;;

*)

默認分支

;;

esac

 

case 支持glob 風格的通配符:

*: 任意長度任意字符

?: 任意單個字符

[] :指定范圍內的任意單個字符

循環

 循環執行

將某代碼段重復運行多次

重復運行多少次:

循環次數事先已知

循環次數事先未知

有進入條件和退出條件

 for, while, until

for 循環

v for 變量名 in 列表;do

循環體

done

v 執行 機制 :

依次 將列表中的元素賦值給“變量名”; 每次賦值后即執

行一次循環體; 直到列表中的元素耗盡,循環

for 循環

v 列表生成方式:

(1) 直接給出 列表

(2) 整數列表:

(a) {start..end}

(b) $(seq [start [step]] end)

(3) 返回列表的 命令

$(COMMAND)

(4) 使用glob, , 如:*.sh

(5) 變量引用;

$@, $*

  while 循環

v while CONDITION; do

循環體

done

v CONDITION :循環控制條件;進入循環之前,先做一次判

斷;每一次循環之后會再次做判斷;條件為“true” ,則執行

一次循環;直到條件測試狀態為“false” 終止循環

v 因此:CONDTION 一般應該有循環控制變量;而此變量的值

會在循環體不斷地被修正

v 進入條件:CONDITION true; ;

v 退出條件:CONDITION false

 until CONDITION; do

循環體

v done

v : 進入條件: CONDITION false

v : 退出條件: CONDITION true

 創建無限循環

v while true; do

循環體

v done

v until false; do

循環體

 Done

while 循環的特殊用法(遍歷文件的每一行):

while read line; do

循環體

done < /PATH/FROM/SOMEFILE

 依次讀取/PATH/FROM/SOMEFILE 文件中的每一行,且將

行賦值給變量line

 雙小括號方法,即(()) 格式,也可以用于算術運算

 雙小括號方法也可以使bash Shell 實現C 語言風格的變量操作

#I=10

#((I++))

v for 循環的特殊格式:

for (( 控制變量初始化; 條件判斷表達式; 控制變量的修正表達式))

do

循環體

done

v 控制變量初始化:僅在運行到循環代碼段時執行一次

v 控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算

,而后再做條件判斷

 break 命令可以帶一個參數,一個不帶參數的break 循環只能退出最內層的循環,而break N可以退出N 層循環。

 continue 命令也可以帶一個參數,一個不帶參數的continue 命令只去掉本次循環的剩余代碼,而continue N 將會把N 層循環剩余的代碼都去掉,但是循環的次數不變。

#!/bin/sh  

for i in "a b c d"

 do   

  echo "$i "

 for j in `seq 10`  

    do  

      if [ $j -eq 5 ];then

        break  

      fi         

      echo "$j "

    done

  echo      

 done  

break結果:

 a 1 2 3 4

 b 1 2 3 4

 c 1 2 3 4

 d 1 2 3 4

 continue結果:

 a 1 2 3 4 6 7 8 9 10

 b 1 2 3 4 6 7 8 9 10

 c 1 2 3 4 6 7 8 9 10

 d 1 2 3 4 6 7 8 9 10

 continue 2的結果:

 a 1 2 3 4

 b 1 2 3 4

 c 1 2 3 4

 d 1 2 3 4

 作業題

1.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出

blob.png

2.求100以內所有正整數之和

blob.png

結果:

blob.png

3.編寫腳本,通過ping命令探測10.1.252.1-254范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。

結果:
blob.png

代碼:

#!/bin/bash

read -p "please input a IPv4(eg:10.1.0.100):" ip

  up=0 down=0

  ipv4=`echo $ip|cut -d. -f1-3`

  n=1

until [ $n -gt 255  ]

do

IP="$ipv4"."$n"

#for ipv in {0..255} ;do

 #  IP="$ipv4"."$ipv"

let n++

   ping "$IP" -c 1 -W 1 &>/dev/null && echo "The Up IPv4 is:$IP" && let up+=1 &>/dev/null || let down+=1 &>/dev/null

done

 echo "IPv4($ipv4.1-255) up is :$up"

 echo "IPv4($ipv4.1-255) down is :$down"

   blob.png

4.編寫腳本,打印九九乘法表

代碼:

#/bin/bash

i=1

j=1

until (($i>=10))

do

j=1

until (($j>$i))

do

sum=$[ $j*$i ]

echo -ne "$i*$j=$sum \t"

if [ $i == $j ] ;then

echo -en "\n"

      fi

     let j++

done

     let i++

done

結果:

 blob.png

代碼:

blob.png

5.編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者

blob.png

blob.png

6.編寫腳本,實現打印國際象棋棋盤

blob.png

blob.png

7.打印等腰三角形

代碼:
blob.png

結果:

blob.png

原創文章,作者:yywan1314,如若轉載,請注明出處:http://www.www58058.com/37023

(0)
yywan1314yywan1314
上一篇 2016-08-21 20:47
下一篇 2016-08-21 20:47

相關推薦

  • Linux下/proc目錄詳解

    Linux下/proc目錄詳解 proc目錄總的概述 proc下有關進程的目錄概述 proc下針對Linux系統相關的參數目錄概述 /proc目錄總的概述 1.首先,我們可以使用ll命令查看下/proc目錄,如下 [root@centos6 ~]# ls -l /proc total 0 dr-xr-xr-x. 8 root root 0 May 19 04…

    Linux干貨 2017-05-20
  • 文本三劍客之AWK

    文本三劍客—-awk(3) awk簡介 awk是一個強大的文本分析工具,與grep(查找)、sed(編輯)一并稱為“文本處理三劍客”。awk最強大的功能是對數據分析并生成報告。 awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk是AWK的GNU版本。 awk其名稱得自于它的創始人 Alfred Aho 、P…

    2017-07-17
  • TCP 的那些事兒(下)

    這篇文章是下篇,所以如果你對TCP不熟悉的話,還請你先看看上篇《TCP的那些事兒(上)》 上篇中,我們介紹了TCP的協議頭、狀態機、數據重傳中的東西。但是TCP要解決一個很大的事,那就是要在一個網絡根據不同的情況來動態調整自己的發包的速度,小則讓自己的連接更穩定,大則讓整個網絡更穩定。在你閱讀下篇之前,你需要做好準備,本篇文章有好些算法和策略,可能會引發你的…

    Linux干貨 2016-08-15
  • 邏輯卷

    LVM是邏輯卷管理(Logical Volume Manager)的簡稱,它是建立在物理存儲設備之上的一個抽象層,允許你生成邏輯存儲卷,與直接使用物理存儲在管理上相比,提供了更好靈活性。       LVM將存儲虛擬化,使用邏輯卷,你不會受限于物理磁盤的大小,另外,與硬件相關的存儲設置被其隱藏,你可以不用停止應用或卸載…

    Linux干貨 2016-09-01
  • 加密與CA

    一次加密通訊流程: 1、生成數據 2、用單向加密數據生成特征碼 3、用自己的私鑰加密特征碼放在數據后面 4、生成臨時會話密鑰加密特征碼和數據 5、用對方的公鑰加密臨時密鑰 2、私有CA 構建私有CA     1、生成私鑰     2、自簽署證書 給節點發放證書     …

    Linux干貨 2017-02-13
  • N21_遲來的第三周練習

    最近忙成狗,落后了許多 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 # who | cut -d ' ' -f1 | uniq 2、取出最后登錄到當前系統的用戶的相關信息。 # last&nbsp…

    Linux干貨 2016-08-02

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-21 22:18

    文章對shell腳本的語法總結的很詳細,同時也通過練習來加深自己對腳本的認識了,排版方面需要用點心思,希望寫出優秀的博文。

欧美性久久久久