bash循环控制语句之for循环
?
一、for循環(huán)的語法
for 變量 in 列表; do
??? 循環(huán)語句1
??? 循環(huán)語句2
??? 循環(huán)語句3
??? ……
done
?
二、用法
用變量去遍歷列表,每訪問列表中的一個元素就執(zhí)行一次循環(huán)語句,直至列表中元素訪問完。
為了熟悉for循環(huán)語法的使用,照搬了課程中的練習(xí)題,順便加深對其他基礎(chǔ)命令的印象。
?
練習(xí)1:使用for循環(huán)創(chuàng)建目錄/tmp/1.dir,/tmp/2.dir和/tmp/3.dir,并將它們的權(quán)限均修改為750;
#!/bin/bash #?Date:?2015-03-26 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?FileName?in?/tmp/{1,2,3}.dir;?domkdir?$FileNamechmod?750?$FileName done?
練習(xí)2:顯示/etc/inittab, /etc/rc.d/rc.sysinit, /etc/fstab三個文件各有多少行
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?FileName?in?/etc/inittab?/etc/rc.d/rc.sysinit?/etc/fstab;?dowc?-l?$FileName????#wc?-l?查看文件內(nèi)容行數(shù) done?
練習(xí)3:使用for循環(huán)修改目錄/tmp/1.dir,/tmp/2.dir和/tmp/3.dir的最近一次修改時間為2010年3月3號3點3分3秒
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?DirName?in?1.dir?2.dir?3.dir;dotouch?-m?-t?201003030303.03?/tmp/$DirName????#修改文件的修改時間touch?-m?-t done?
練習(xí)4:使用for循環(huán)統(tǒng)計/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#開頭的行的行數(shù)
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?FileName?in?/etc/fstab?/etc/rc.d/rc.sysinit?/etc/inittab;doLINES=`grep?"^#"?$FileName?|?wc?-l`echo?"$FileName:$LINES" done?
練習(xí)5:使用for循環(huán)統(tǒng)計/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#開頭的行的行數(shù)和空白行數(shù)
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?FileName?in?/etc/fstab?/etc/rc.d/rc.sysinit?/etc/inittab;doecho?"$FileName:"echo?-e?"\t#LINES:`grep?"^#"?$FileName?|?wc?-l`"????echo?-e?"\tSpace?LINES:`grep?"^$"?$FileName?|?wc?-l`"????#echo?-e?與引號內(nèi)的?\t?實現(xiàn)轉(zhuǎn)義序列,可用于制表,下圖中行前的空白部分即是實現(xiàn)效果 done?
練習(xí)6:使用for循環(huán)分別將/proc/cpuinfo、/proc/meminfo、/proc/uptime三個文件中的所有小寫字符顯示為大寫
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?FileName?in?cpuinfo?meminfo?uptime;dotr?'a-z'?'A-Z'?<?/proc/$FileName done?
練習(xí)7:使用for循環(huán)顯示用戶user1、user2和user3各自的id號
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?User?in?user1?user2?user3;doecho?"$User:`id?-u?$User`" done或者
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?I?in?1?2?3;doecho?"user$I:`id?-u?user$I`" done?
練習(xí)8:使用for循環(huán)分別統(tǒng)計/usr、/var、/bin、/sbin目錄下各自的文件個數(shù)
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?Dir?in?/usr?/var?/bin?/sbin;dols?$Dir?|?wc?-l done?
練習(xí)9:使用for循環(huán),分別將user1、user2和user3加入到testgrp組中,以其為額外組
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 groupadd?testgrp for?I?in?1?2?3;dousermod?-a?-G?testgrp?user$I????#-a參數(shù)意為追加,不加則為修改 done練習(xí)10:使用for循環(huán),將“Hello Linux.”,“Hello www.magedu.com”, “GNU is Not Unix.”三行內(nèi)容添加至/tmp/test.txt文件,并顯示/tmp/test.txt文件的內(nèi)容
!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?Contents?in?"Hello?Linux"?"Hello?www.magedu.com"?"GNU?is?Not?Unix";doecho?$Contents?>>?/tmp/text.txt????#>>?追加輸入重定向 done cat?/tmp/text.txt練習(xí)11:使用for循環(huán),復(fù)制/etc/fstab、/etc/inittab和/etc/rc.d/init.d/functions文件至/tmp/目錄中,并重命名為原有的名稱之后加當(dāng)前日期,如第一個文件為/tmp/fstab-2013-07-15
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?File?in?/etc/fstab?/etc/inittab?/etc/rc.d/init.d/functions;doFileName=`basename?$File`????#此處取基名cp?$File?/tmp/$FileName-`date?+%F`????#注意date后的空格done?
練習(xí)12:顯示當(dāng)前系統(tǒng)上所有默認shell為/bin/bash的用戶名、ID號及其在/etc/passwd文件中的行號
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?Bash?in?`grep?-n?"/bin/bash"?/etc/passwd`;doecho?$Bash?>>?/tmp/bash_user_id_lines.txt????#這里將變量內(nèi)容寫進了臨時文件中done cut?-d:?-f1,2,4?/tmp/bash_user_id_lines.txt rm?/tmp/bash_user_id_lines.txt?
練習(xí)13:顯示/etc/passwd文件中第1、3、6、12個用戶的用戶名、ID和shell
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?Line?in?1?3?6?12;doUserName=`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:$Uid,SHELL:$Shell" done?
練習(xí)14:顯示/etc/passwd文件中第1、3、6、12個用戶的用戶名、ID和基本組的組名
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 for?Line?in?1?3?6?12;?doUserName=`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、使用通配符實現(xiàn)文件通配,例如for File in /var/*; ?
??? 3、使用命令生成列表:見下面的例子
??? for File in `ls /var`;
生成數(shù)字序列:
??? {}:{起始數(shù)字..結(jié)束數(shù)據(jù)},例如{1..100}表示從1到100之間的所有正整數(shù); ?
??? `seq [起始數(shù)字] [步長] 結(jié)束數(shù)字`:
練習(xí)15:使用for循環(huán)取出每個用戶用戶名和Shell?
?
練習(xí)16:顯示/var/目錄下每個文件的內(nèi)容類型,并統(tǒng)計文件的總數(shù)
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 Count=0 for?File?in?/var/*;dofile?$FileCount=$[$Count+1]echo?"Total?files:$Count." done練習(xí)17:寫一個腳本,計算100以內(nèi)所有整數(shù)的和
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 Sum=0 for?I?in?`seq?1?100`;doSum=$[$Sum+$I] done echo?"Sum:$Sum."#或#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 Sum=0 for?I?in?{1..100};?doSum=$[$Sum+$I] done echo?"The?sum?is:?$Sum."?
練習(xí)18:寫一個腳本,計算100以內(nèi),所有偶數(shù)的和,以及所有奇數(shù)的和
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 EvenSum=0 OddSum=0 for?I?in?`seq?1?2?100`;doOddSum=$[$OddSum+$I] done for?I?in?`seq?2?2?100`;doEvenSum=$[$EvenSum+$I] done echo?"EvenSum?is?$EvenSum,OddSum?is?$OddSum."練習(xí)19:寫一個腳本,計算當(dāng)前系統(tǒng)上所有用戶的ID號之和
#!/bin/bash #?Date:?2015-03-30 #?Author:?ArvinLau #?Description:? #?Version:?1.0 Sum=0 for?I?in?`cut?-d:?-f3?/etc/passwd`;doSum=$[$Sum+$I] done echo?"ID?Sum?is:$Sum."轉(zhuǎn)載于:https://blog.51cto.com/64314491/1626611
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的bash循环控制语句之for循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3月第3周中国五大顶级域名总量增5.4万
- 下一篇: 蚌埠学院官网综合新闻条目抓取