shell學習之for迴圈語句【初學者】

來源:互聯網
上載者:User

標籤:for   shell   

前言:日常系統管理工作中有大量需要重複啟動並執行指令,shell編程提供了for、while、until、select迴圈語句以實現特定指令的反覆執行功能,在所有的迴圈語句中,變數必須要有初始值,每次運行命令序列前都需要對條件進行過濾,滿足條件才會運行命令,否則不執行相關操作。下面介紹的就是for迴圈語句的兩種文法格式。

for 迴圈每次處理依次列表內資訊,直至迴圈耗盡。相對於while、until的迴圈方式是必須符合某個條件的狀態,for這種文法是已經知道要進行幾次迴圈的狀態。

 

文法格式1

for 變數 in 值1  值2  值3....

do

   執行程式

done

說明:for語句通過對變數的定義取值決定迴圈的執行次數,根據變數賦值的次數,for迴圈內的指令將被執行相同的次數,如定義一個變數i取值為2、3、4,則最終for迴圈將迴圈執行命令三次。for語句的文法格式1對變數的賦值通過在in後面直接賦值,多個賦值通過空格隔開。當變數值在列表裡,for迴圈即執行一次所以命令,使用變數名擷取列表中的當前取值。命令可為任何有效shell命令和語句。

in列表可以包含替換、字串和檔案名稱

in列表是可選的,如果不用它,for迴圈使用命令列的位置參數。

 

簡單for迴圈例子

例1:按順序輸出資料行表中的數字:

[[email protected] sh]# vi for1.sh [[email protected] sh]# cat for1.sh #!/bin/bashfor i in 1 2 3 4 5  ##i是變數,1 2 3 4 5是賦值給變數idoecho $idone[[email protected] sh]# ./for1.sh   ##執行結果12345

也可以在迴圈體重結合使用變數名跟字串,如下。

echo "The value is: $i" 輸出結果:The value is: 1The value is: 2The value is: 3The value is: 4The value is: 5


例2:列印字串列表

下面for迴圈中,列表包含字串“orange red blue grey”,命令為echo,變數名為loop,

echo命令使用$loop反饋出列表中所有取值,直至列表為空白。

[[email protected] sh]# vi forloop.sh [[email protected] sh]# cat forloop.sh #!/bin/bashfor loop in orange red blue grey  doecho $loopdone[[email protected] sh]# ./forloop.sh   ##執行結果orange red blue grey ##在迴圈體重結合使用變數名跟字串


例3:簡易批量解壓縮指令碼(這裡指令碼替換成批量查詢檔案數量)

[[email protected] sh]# vi for2.sh [[email protected] sh]# cat for2.sh #!/bin/bashcd /mnt/sh/  ##先進入到對應目錄下ls *.sh > ls.log  ##在sh目錄下,列出以.sh結尾的所有檔案,覆蓋到ls.log檔案中(這裡使用覆蓋,而不是追加,是因為還不確定ls.log這個檔案是否真實存在,如果有就會影響程式執行,所以使用覆蓋)y=1          ##設定變數y=1for i in $(cat ls.log)  ##為變數i賦值 cat ls.log的輸出結果doecho $y   ##輸出變數y值,輸出一個結果就給y賦值1y=$(( $y + 1 ))  ##變數y=變數y+1(雙小括弧,才能進行加減乘除運行算)done[[email protected] sh]# ./for2.sh  ##執行結果12345678[[email protected] sh]# ls   ##校正執行結果查看有多少.sh結尾的檔案for1.sh  for2.sh  for3.sh  for4.sh  if1.sh  if2.sh  if3.sh  if4.sh  ls.log[[email protected] sh]#

可以修改為列印目前的目錄下的所有檔案

[[email protected] sh]# cat for5.sh #!/bin/bashfor i in `ls `doecho $idone[[email protected] sh]# ./for5.sh for1.shfor2.shfor3.shfor4.shfor5.shif1.shif2.shif3.shif4.shls.log


文法格式2:

for (( 初始值;迴圈控制條件;變數變化))

do

執行程式

done

說明:文法格式2則是首先通過初始設定變數的值,也就是定義一個變數的初始值,然後通過運算修改變數的值,當結束迴圈的條件滿足時,for迴圈結束。

初始值:某個變數在迴圈前的起始值,直接以類似i=1的方式設定好。

迴圈控制條件:當變數值在這迴圈控制範圍內就可以繼續執行。例如i<=100

變數變化:每做一個迴圈時變數的變化。例如:i=i+1

值得注意的是,在“變數變化”的設定上,如果每次都加1,可以使用類似“i++”的方式,即i每次迴圈都會增加1。可以以這種方式來進行1累加到100的迴圈

 

例1:從1累加到 100的迴圈

[[email protected] sh]# vi for3.sh [[email protected] sh]# cat for3.sh #!/bin/bashx=0for (( x=1;x<=100;x=x+1 ))   ##先初始值x=1分號在執行迴圈控制條件判斷x<=100的時候,在執行變數變化x=x+1doy=$(($y+$x))    ##變數y就等於 變數y+變數xdoneecho "The sum of 1+2+...+100 is:$y"  ##當x值小於等於100時,輸出變數y等於變數y加變數x的結果[[email protected] sh]# ./for3.sh The sum of 1+2+...+100 is:5050   ##執行結果[[email protected] sh]#


例2:大量新增指定數量的使用者(if條件判斷與for迴圈結合使用)

[[email protected] sh]# vi for4.sh [[email protected] sh]# cat for4.sh #!/bin/bashread -t 30 -p "input name: " nameread -t 30 -p "input num: " numread -t 30 -p "input password: " password if [ ! -z $name -a ! -z $num -a ! -z $password ]theny=$( echo $num | sed ‘s/^[0-9]*$//g‘ )if [ -z "$y"]thenfor (( i=1;i<=$num;i=i+1 ))douseradd "$name$i" &> /dev/nullecho $password | passwd --stdin "$name$i" &> /dev/nulldonefifi[[email protected] sh]# ./for4.sh  input name: zhangsaninput num: 5input password: abc123  [[email protected] sh]# ls /home  ##去home家目錄下查看執行結果,有張三使用者說明添加oklost+found  zhangsan1  zhangsan2  zhangsan3  zhangsan4  zhangsan5[[email protected] sh]#

read -t 30指定三十秒讀取時間

read -p "input name: " 設定input name: 為讀取值時的提示符

!取反

-z如果這個值為空白 則返回真。加上!表示:有值才能執行下面語句。

-a 邏輯與(同時判斷)

echo $num | sed ‘s/^[0-9]*$//g‘ :輸出變數num結果管道符過濾後,用正則sed判斷輸出的是否是數字,如果是就會把變數結果替換為空白。(在實際生活中,如果你是自己大量新增使用者的,並沒有那麼繁瑣,還去判斷什麼輸入使用者的個數是否是數位,這塊if語句完全可以省略)

-z "$y" :變數y為空白,返回真

i=1;i<=$num;i=i+1 參照 i=1;i<=100;i=i+1 解釋

useradd "$name$i" &> /dev/null:建立使用者自訂變數名+數字,執行結果匯入黑洞

echo $password | passwd --stdin "$name$i" &> /dev/null:輸入密碼管道給自訂變數名+數位使用者,執行結果匯入黑洞

 

附:read命令簡單介紹

read命令從鍵盤讀取變數的值,通常用在shell指令碼中與使用者進行互動的場合。該命令可以一次讀取多個變數的值,變數和輸入的值都需要使用空格隔開。

文法:read(選項)(參數)

選項: 

-p:指定讀取值時的提示符

-t:指定讀取值時的等待時間(秒)

參數:指定讀取值得變數名


本文出自 “NJ小生” 部落格,請務必保留此出處http://qingwl.blog.51cto.com/9853378/1919786

shell學習之for迴圈語句【初學者】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.