shell指令碼編程之迴圈控制結構
迴圈控制之for迴圈
文法結構1
for Variable in List
do
commands
done
文法結構2
for Variable in List;do
commands
done
這個List可以為列表、變數、命令 等等
for迴圈 事先提供一個元素列表,而後,使用變數去遍曆此元素列表,每訪問一個元素,就執行一次迴圈體,直到元素訪問完畢
1、for迴圈中的List為列表
eg1: 顯示/etc/inittab, /etc/rc.d/rc.sysinit, /etc/fstab三個檔案各有多少行;
#!/bin/bashfor File in /etc/inittab /etc/rc.d/rc.sysinit /etc/fstab;do Row=`wc -l $File | cut -d' ' -f1`echo "$File has: $Row rows"done
運行結果
2、for迴圈中的List為變數
eg2:顯示當前ID大於500的使用者的使用者名稱和id;
#!/bin/bashuseradd user1useradd user2useradd user3 #建立幾個使用者便於測試結果Id=`cat /etc/passwd | awk -F: '{print $3}'`for Var in $Id;doif [ $Var -ge 500 ];then User=`grep "$Var\>" /etc/passwd | cut -d: -f1` echo "$User uid is $Var"fidone
運行結果
3、for迴圈中的List為命令
eg3:顯示當前shell為bash的使用者的使用者名稱和shell。
顯示結果為 Bash user:root,/bin/bash
分析:先通過以bash結尾的shell來確定使用者,然後把這些使用者一個一個的輸出
#!/bin/bashfor Var in `grep "bash\>" /etc/passwd | cut -d: -f7`;doUser=`grep "$Var" /etc/passwd |cut -d: -f1`doneShell=`grep "bash\>" /etc/passwd |cut -d: -f7 |uniq`for name in $User;doecho "Bash user:$name,$Shell"done
運行結果
4、for迴圈中的List為一連串的數字
eg4:分別計算1-100以內偶數(Even number)的和,奇數(Odd number)的和.
分析:當一個數與2取餘用算時,為1則表示該數為奇數,反之為偶數。
#!/bin/bashEvenSum=0OddSum=0for I in `seq 1 100`;do if [ $[$I%2] -eq 1 ]; then OddSum=$[$OddSum+$I] else EvenSum=$[$EvenSum+$I] fidoneecho "EvenSum: $EvenSum."echo "OddSUm: $OddSum."
運行結果
5、C語言格式的for迴圈
eg5:添加使用者從user520添加到user530,且密碼與使用者名稱一樣。
#!/bin/bashfor ((i=520;i<=530;i++));douseradd user$iecho "Add user$i."echo user$i | passwd -stdin user$i &>/dev/nulldone
運行結果:(可以切換一個使用者試試密碼是否和使用者名稱一樣)
其他迴圈的格式如下,所有這些迴圈熟練掌握一種迴圈即可。
while迴圈命令的格式
while test command
do
other command
done
until迴圈的命令格式
until test command
do
other command
done
一個指令碼的面試題 ,各位博友可以把您的答案回複在下面(大家一起交流)
通過傳遞一個參數,來顯示當前系統上所有預設shell為bash的使用者和預設shell為/sbin/nologin的使用者,並統計各類shell下的使用者總數。
運行如 bash eg.sh bash則顯示結果如下
BASH,3users,they are:
root,redhat,gentoo,
運行如 bash eg.sh nologin則顯示結果如下
NOLOGIN, 2users, they are:
bin,ftp,
======博主所學知識來著於恩師馬哥的親授======
馬哥教育“2014夏令營”開始啦!!!馬哥教育是目前性價比最高的Linux培訓,國內好評度排名第一,並被網友稱為Linux界的"黃埔軍校",全部課程採用Centos6.5x86_64講解,經過幾期網路班的總結和錘鍊,逐漸完善的課程體系,學員學習進度監督和優質的考試系統檢驗學員掌握程度,活躍的線上答疑環節,名師陪伴,牛人指點,精彩不容錯過。
詳情猛戳:http://www.magedu.com/
課程內容:http://www.magedu.com/mentuqc
網路班一體化服務:http://mageedu.blog.51cto.com/4265610/1379598
連絡方式:客服QQ 2813150558 客服QQ 1661815153
============================================