腳本入門之for循環

面向過程的編譯語句,語言控制結構:shell


順序執行:默認法則,逐條執行各語句bash


選擇執行:條件判斷,只有部分是符合條件,只執行符合條件的部分ide


布爾測試:真,假(0:真;1-255:假);測試


循環執行:將同一段代碼反覆執行n次;循環必需要有退出條件,不然就成爲了死循環。spa


控制語句:it


     bash循環控制語句:io


              forfor循環


              while編譯


              untilfunction


bash的for循環:


      事先提供一個元素列表,然後,使用變量去遍歷此元素列表;每訪問一個元素,就會執行一次循環體;直到元素遍歷完畢


用法格式:


        for VAR_NAME in 元素(列表)1 元素(列表)2…


        do


語句1


語句2


           …


        done


注:for和do能夠寫在同一行中但必須用分號隔開


對於這些知識的運用只能在練習中不斷練習才能達到牢固掌握。


練習1:寫一個腳本


      使用for循環建立目錄/tmp/1.dir,/tmp/2.dir和/tmp/3.dir,並將它們的權限均修改成750;


#!/bin/bash


for DirName in/tmp/1.dir /tmp/2.dir /tmp/3.dir; do


 mkdir $DirName


 chmod 750 $DirName


done


ls –l /tmp 驗證一下



練習2:寫一個腳本


使用for循環修改目錄/tmp/1.dir,/tmp/2.dir和/tmp/3.dir的最近一次修改時間爲2010年3月3號3點3分3秒;


#!/bin/bash


for Dir in/tmp/1.dir /tmp/2.dir /tmp/3.dir


do


touch -mt201003030303.03 $Dir


done


stat/tmp/1.dir 查看結果


或:#!/bin/bash


for Dir in/tmp/1.dir /tmp/2.dir /tmp/3.dir


do


stat $Dir


touch -mt201003030303.03 $Dir


stat $Dir


done


練習3:寫一個腳本


使用for循環統計/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#開頭的行的行數;


        #!/bin/bash


for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab


do


grep '^#.*' $ File| wc -l


done


人性化寫法:


#!/bin/bash


for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab ; do


    LINES=`grep '^#' $File | wc -l`


    echo "$File:$LINES"


done


#!/bin/bash


for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do


    LINES=$(grep '^#' $File | wc -l)


    echo "$File:$LINES"


done


練習4:寫一個腳本


使用for循環統計/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#開頭的行的行數和空白行數;


#!/bin/bash


for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab;do


 echo "$File:"


 echo "lines:`grep "^#" $File |wc -l`"


 echo "space lines:`grep "^$"$File | wc -l`"


done


練習5:寫一個腳本


使用for循環,複製/etc/fstab、/etc/inittab和/etc/rc.d/init.d/functions文件至/tmp/目錄中,並重命名爲原有的名稱以後加當前日期,如第一個文件爲/tmp/fstab-2013-07-15;


#!/bin/bash


for File in/etc/fstab /etc/inittab /etc/rc.d/init.d/functions; do


 cp $File /tmp/$File-`date +%F`


done


練習6:寫一個腳本


     顯示/etc/passwd文件中第一、三、六、12個用戶的用戶名、ID和shell;


#! /bin/bash


for Line in 1 3 6 12;do


UserName=`head -$Line /etc/passwd | tail -1 | cut -d: -f1`


        Uid=`head-$Line /etc/passwd | tail -1 | cut -d: -f3`


        Shell=`head-$Line /etc/passwd | tail -1 | cut -d: -f7`


        echo"User: $UserName, UID is $Uid, Shell: $shell"


done


練習7:寫一個腳本


     顯示/etc/passwd文件中第一、三、六、12個用戶的用戶名、ID和基本組的組名;


#!/bin/bash


for Line in 1 3 6 12; do


UserName=`head -$Line /etc/passwd | tail -1 | cut -d: -f1`


Uid=`head -$Line /etc/passwd | tail -1 | cut -d: -f3`


GroupName=`id -gn $UserName`


echo "$UserName, $Uid, $GroupName"


done


列表的生成方式:


1:逐個給出,如:/etc/inittab/etc/fstab;


2:使用通配符來實現文件通配,例:for File in /var/*;


3:使用命令生成列表,詳見下例(生成的通常爲相對路徑)


            #!/bin/bash


for File in `ls /var`;do


                  file /var/$file


done


4:生成數字序列;


    {}:{起始數字..結束數字},例如{1..100}表示從1到100之間的全部正整數


      `seq [起始數字] [步長] [結束數字]`,例:seq 1 2100 表示從1到100之間以2個單位輸出


練習8: 寫一個腳本


使用for循環取出每一個用戶用戶名和Shell;


#!/bin/bash


LINES=`wc -l/etc/passwd | cut -d' ' -f1`


for I in `seq 1$LINES`; do


 head -$I /etc/passwd | tail -1 | cut -d:-f1,7


done

相關文章
相關標籤/搜索