bash腳本編程class2

bash腳本class2—循環語句的使用

     一.三種循環語句以及其具體使用方法

  我們知道,在shell腳本編程過程中,為了實現邏輯關系的運算,有三種執行命令的順序:順序執行,選擇執行,循環執行。通過if,case這類語句可以實現條件篩選后執行命令,這次課程中所學的主要知識點為循環語句的三種使用方式:for,while,until。下面作為總結,我將一一介紹這三種使用方法。

  1.for語句的使用方法

  for語句的格式是這樣的:

  for 變量 in 變量列表;do 循環命令  done

  變量就是所要執行變量的參數,這些參數是由我們定義在in后面的變量列表中,按照變量列表中的所有參數順序一次一次的執行循環命令,直到列表中的參數使用完。舉例如下:

[root@localhost ~]# for x in {1..10};do echo  $[x+1];done
2
3
4
5
6
7
8
9
10
11

 這段命令就是一段for循環語句,顯示變量1-10分別加1得到的所有值

  for語句還有更為簡潔的寫法,與c語言邏輯語句相似,for((cmd1;cmd2;cmd3)) ;do 循環語句 ;done。其中cmd1為變量初始設定,cmd2為變量判斷,cmd3為變量值更改,舉個例子:

   打印99乘法表: 

#!/bin/bash
for ((x=1;x<=9;x++));do
    for ((y=1;y<=x;y++));do
        echo -ne "$x*$y=`echo $[x*y]'\t'`"
    done
    echo ""
done

  執行得到結果

[root@localhost ~]# bash 99for.sh
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

  2.while與until的循環使用方法

  while與until循環的語句寫法是一樣的,不同的是判斷執行循環的條件不同。while 判斷 ;do 循環體;done。表示當條件判斷為真時,執行循環體,相反until 判斷 ;do 循環體;done表示當條件判斷為假時,執行循環體。舉例如下:

#!/bin/bash
k=0
i=1
while [[ $i -le 100 ]] ;do
    let  k=$k+$i
    let i=$i+1
done
   echo $k

  效果等同于

#!/bin/bash
k=0
i=1
until [[ $i -gt 100 ]] ;do
    let  k=$k+$i
    let i=$i+1
done
   echo $k

  執行這兩個腳本后,得到的結果相同,為1+2..+10=5050。

  由于這兩個執行指令相似,所以使用while進行統一歸類實例。while與until可以制作死循環語句,如下寫法:

  while ture ;do 循環體 ;done

  until false ;do 循環體 ;done

  while還有一種特殊使用方法,使用重定向,將文件每一行內容作為變量,使用read逐行掃描并執行循環體。效果如同sed命令。舉例如下:

  將/etc/passwd文件的每一行首字符打印出來:

#!/bin/bash
while read xxx ; do
   echo `echo $xxx | cut -c 1`
done < /etc/passwd

[root@localhost bin]# bash 000001.sh
r
b
d
a
l
s
s
h
m
o
g
f
n
s
...

  3.break和continue

  break與continue用法相似,代表意義不同。這兩個指令使用在循環語句中,后面可以接數字表示第N層循環,不加或者1表示當前循環。continue表示退出這一次循環,執行下一個參數的循環。而break表示退出當前的循環。在while與until中很常見。比如:

#!/bin/bash
for ((i=1;i<=10;i++));do
    if [ $i -eq 2 -o $i -eq 4 ];then
        continue
    fi
    echo $i
done

[root@localhost bin]# bash 000000.sh 
1
3
5
6
7
8
9
10

  這個語句本來表示顯示從1到10,但是在循環中if判定條件中當i=2或4的時候選擇執行continue,所以下面的echo $i就被跳過執行了。

  

    二.select語句以及與case語句的聯合使用方式

  select語句是一個死循環命令語句,想要跳出需要使用條件判定和break。命令格式為:select 變量 in 變量列表 ;do 循環體 ;done。select命令創建一個菜單,當我們輸入編號時,按照編號打印相應的變量。如下所示:

#!/bin/bash
echo "who is bitch?"
select xxx in laowang laosong marong;do
    echo $xxx
    if [[ $xxx == marong ]];then
    echo "Sure,you are right!!"
    break
    else
    echo "SB Think more!"
    fi
done

[root@localhost bin]# bash 000002.sh
who is bitch?
1) laowang
2) laosong
3) marong
#? 1
laowang
SB Think more!
#? 2
laosong
SB Think more!
#? 3
marong
Sure,you are right!!

  執行后如上所示。marong是bitch。下面看select與case的合作:

#!/bin/bash
echo "who is bitch?"
select xxx in laowang laosong marong;do
    case $xxx in
laowang)
    echo "wrong!"
;;
laosong)
    echo "you almost right,but he is a man"
;;
marong)
    echo "Sure! she is so bitch!!"
    break
    esac
done

[root@localhost bin]# bash 000002.sh
who is bitch?
1) laowang
2) laosong
3) marong
#? 1
wrong!
#? 2
you almost right,but he is a man
#? 3
Sure! she is so bitch!!

 

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

(0)
mcgeewangmcgeewang
上一篇 2016-08-18
下一篇 2016-08-19

相關推薦

  • Linux 系統中screen命令不能使用的解決辦法,screen包的正確安裝

           有些同學可能在安裝完Linux發行版之后,發現screen功能不能實現,這是因為是實現該功能的包在安裝系統的過程中沒有安裝上,這里我根據自己的經驗介紹兩種安裝screen包的方法,用來你實現screen命令。 方法一、     條件:連網狀態;   &nb…

    2017-07-12
  • apache自動化腳本搭建虛擬主機

    1 基于主機名實現三個虛擬主機 (1).創建網站目錄與測試文件 (2).創建虛擬主機文件(目錄為/etc/httpd/conf.d/下)   (3).修改測試apache主機hosts文件(就不用DNS服務器解析,方便測試),測試httpd配置文件是否有問題,重啟httpd服務   (4)修改測試主機hosts文件(就不用DNS服務器解析…

    Linux干貨 2016-10-09
  • 常用命令之ls 詳解

    ls詳解 羅列目錄內容權限,列出文件的信息列表(默認為當前目錄)。 這個命令是Linux操作系統使用頻率最高的命令,沒有之一。熟練掌握這個命令的常用參數,可以提高學習、工作效率,因此需要認真對待。 1. 常用選項 – -a,–all:顯示當前目錄下全部文件(常用) [root@jingz ~]# ls -…

    Linux干貨 2016-08-02
  • DNS簡單概念 一

    DNS簡單概念 一 DNS簡單概念 一 1 §·主機角色 1 §·DNS服務器的類型: 1 §·DNS中簡單術語 2 §·DNS中資源記錄及其類型 2 §·DNS域與區域 4 §·BIND安全設置 5 §·BIND高級設置BIND VIEW 6   §·主機角色 在網絡上不同的主機有不同的角色, 比如: DNS解析角色,郵件角色,網頁服務器 §·D…

    Linux干貨 2016-09-26

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 09:12

    文章思路很清晰,對for,until,while語句的語法總結的很全面,同時通過示例演示了until和while之間的區別,很好,再接再勵哦

欧美性久久久久