面向過程的編譯語句,語言控制結構:
順序執行:預設法則,逐條執行各語句
選擇執行:條件判斷,隻有部分是符合條件,隻執行符合條件的部分
布爾測試:真,假(0:真;1-255:假);
循環執行:将同一段代碼反複執行n次;循環必須要有退出條件,否則就成為了死循環。
控制語句:
bash循環控制語句:
for
while
until
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秒;
for Dir in/tmp/1.dir /tmp/2.dir /tmp/3.dir
do
touch -mt201003030303.03 $Dir
stat/tmp/1.dir 檢視結果
或:#!/bin/bash
stat $Dir
練習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
grep '^#.*' $ File| wc -l
人性化寫法:
for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab ; do
LINES=`grep '^#' $File | wc -l`
echo "$File:$LINES"
for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do
LINES=$(grep '^#' $File | wc -l)
練習4:寫一個腳本
使用for循環統計/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab檔案中各自以#開頭的行的行數和空白行數;
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`"
練習5:寫一個腳本
使用for循環,複制/etc/fstab、/etc/inittab和/etc/rc.d/init.d/functions檔案至/tmp/目錄中,并重命名為原有的名稱之後加目前日期,如第一個檔案為/tmp/fstab-2013-07-15;
for File in/etc/fstab /etc/inittab /etc/rc.d/init.d/functions; do
cp $File /tmp/$File-`date +%F`
練習6:寫一個腳本
顯示/etc/passwd檔案中第1、3、6、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"
練習7:寫一個腳本
顯示/etc/passwd檔案中第1、3、6、12個使用者的使用者名、ID和基本組的組名;
for Line in 1 3 6 12; do
Uid=`head -$Line /etc/passwd | tail -1 | cut -d: -f3`
GroupName=`id -gn $UserName`
echo "$UserName, $Uid, $GroupName"
清單的生成方式:
1:逐個給出,如:/etc/inittab/etc/fstab;
2:使用通配符來實作檔案通配,例:for File in /var/*;
3:使用指令生成清單,詳見下例(生成的一般為相對路徑)
#!/bin/bash
for File in `ls /var`;do
file /var/$file
4:生成數字序列;
{}:{起始數字..結束數字},例如{1..100}表示從1到100之間的所有正整數
`seq [起始數字] [步長] [結束數字]`,例:seq 1 2100 表示從1到100之間以2個機關輸出
練習8: 寫一個腳本
使用for循環取出每個使用者使用者名和Shell;
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