Shell腳本-循環基礎
背景:
正在學習Shell腳本之循環,發現Shell的循環和其他編程語言大同小異,邏輯上都是相通的,但在使用格式上卻有點不同,在學習完Shell循環后,將學習的心得體會記錄下來,以備今后復習。
介紹:
什么是Shell腳本:
shell script是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一些shell的語法與指令寫在里面,然后用正規表示法,管道命令以及數據流重導向等功能,以達到我們所想要的處理目的。
shell script就像早期dos年代的.bat,將許多指令匯整寫一起,讓使用者很容易地就能夠一個操作執行多個命令,而shell script還提供了數組,循環,條件以及邏輯判斷等重要功能,讓使用者可以直接以shell來寫程序,而不必使用類似C程序語言等傳統程序編寫的語法。
Shell–for循環
格式1:
格式:for name [in words …] ; do COMMANDS;done
其中for為關鍵字,表示下面是使用的for循環
name是循環時使用的名字,它代表被循環列表里的具體值。在循環體里,我們不知道系統循環到哪了,也就不知道具體值是什么,所以需要一個統一的名字來代表這個值,而這里的name就是代表這個值的,它的名字是可以自己隨意取的,但是要避開使用一些系統關鍵字和保留字。
in words … 代表使用的循環列表,可以是一串字符也可以是數組,如for name in word1 word2 word3 …,其中in是關鍵字,如果后面有循環列表就需要使用in。
do COMMANDS :其中do是關鍵字,表示后面是循環執行的命令,COMMANDS代表命令集合,可以是多個命令
done代表循環結束
如果這些代碼是寫在一行的,需要用”;”來分開,如果是分行寫可以不用加”;”,后面會有列子供參考。
例子1:
for i in zhangsan lisi wangwu;do echo your name is $i done輸出效果:
![]()
例子2:
for i in {1..10};do echo number is $i done輸出效果:
![]()
例子3:
for i in `seq 10`;do #循環10次,seq 10命令表示1到10 useradd user$i #添加用戶 echo user$i is created #提示用戶添加 password=`tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 8` #隨機生成8位數密碼 echo user$i:$password >> /root/user.log #將密碼寫入日志文件 echo $password | passwd --stdin "user$i" &> /dev/null #為用戶添加密碼 done #結束 unset password #釋放變量password輸出效果:
![]()
生成的密碼:
![]()
格式2:
格式:for (( exp1; exp2; exp3 )); do COMMANDS; done
這個用法和C語言的for循環差不多,不過這里用兩個()括起來
exp1表示循環的起始值
exp2表示循環執行的條件,滿足條件則執行,不滿足則退出循環
exp3表示循環成功執行后的操作
其他的和第一種格式是一樣的
例子:
for ((i=0;i<10;i++));do echo number is $i done輸出效果:
![]()
Shell循環–while
格式:
格式:while COMMANDS; do COMMANDS; done
其中while為關鍵字,表示后面使用while循環
COMMANDS表示循環執行條件,COMMANDS結果為true時執行循環,為false則退出循環
do COMMANDS 表示循環執行的命令集
done 表示循環結束
例子:
i=0 #初始化i while [ $i -lt 10 ];do #當i 小于10時執行循環體里的命令 echo $i #輸出 i 的值 let i++ # i+1 done #結束輸出效果:
![]()
從while的格式可以看出,while更適合循環次數不確定的場合,因為只要是true,while就不會停止。這樣就可以做一個死循環。
while true;do #true表示真, echo godai done執行這個腳本會一直輸出gidai,直到我們強行結束這個腳本。
原創文章,作者:657188918,如若轉載,請注明出處:http://www.www58058.com/85359