shell編程中for循環(huán)語句的實現(xiàn)過程及案例
前言
本篇是shell編程for循環(huán)的實現(xiàn)過程以及一些案例
什么是for循環(huán)
讀取不同的變量值,用來逐個執(zhí)行同一組命令
for 變量名 in 取值列表
do
命令序列
done
#用變量名去取值,然后挨個執(zhí)行命令,其實就是一個遍歷的過程
循環(huán)體中三種專業(yè)的話術(shù):遍歷、迭代、遞歸
[root@bogon ~]# for i in {1..10} > do > echo $i > done 1 ... 10 [root@bogon ~]# for i in $(seq 1 10); do echo $i; done 1 ... 10 #分號可以使交互式的命令在一行執(zhí)行 [root@bogon ~]# for ((i=1;i<=10;i++)); do echo $i; done 1 ... 10 #類似于java、c語言
示例1:批量添加用戶
用戶名存放在users.txt文件中,每行一個初始密碼均設(shè)為000000
[root@bogon sh]# vim addusers.sh #!/bin/bash #demo add users for USER in $(cat /data/users.txt) do useradd $USER echo "000000" |passwd --stdin $USER done
示例2:根據(jù)IP地址檢查主機(jī)狀態(tài)
IP地址存放在ipadds.txt文件中,每行一個使用ping命令檢測各主機(jī)的連通性
[root@bogon sh]# vim testping.txt #!/bin/bash #demo test ping for host in $(cat /data/ip.txt) do ping -c 3 -i 0.5 -w 2 $host &> /dev/null if [ $? -eq 0] then echo "$host is online" else echo "$host is offline" fi done
[root@bogon sh]# vim testping.txt #!/bin/bash #demo test ping 192.168.109.0/24 for host in {1..254} do ping -c 3 -i 0.5 -w 2 192.168.109.$host &> /dev/null if [ $? -eq 0] then echo "$host is online" else echo "$host is offline" fi done
示例3:自動生成一個8位隨機(jī)密碼 取值范圍大小寫字母和數(shù)字
字符串分片
i="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 0 61 ${i:n:m} #i是變量名,n是開始取值的下標(biāo),下標(biāo)從0開始,m是取值長度 ${#變量名} #取字符串長度 echo ${i:3:3} #取值456 echo ${i:7:1} #取值8 變量1+=變量2 #字符串追加
生成隨機(jī)數(shù)
echo $[$RANDOM % 62] #生成0-61的隨機(jī)數(shù) echo $[$RANDOM % ${#i}] #生成該變量名長度以內(nèi)的隨機(jī)數(shù) num=$($[$RANDOM % ${#i}]) for i in {1..8} do echo ${i:$num:1} done #從i變量值中取隨機(jī)數(shù),每次取一個,取8次
示例代碼
[root@localhost sh]# vim random.sh #!/bin/bash #隨機(jī)生成8位隨機(jī)密碼 #定義密碼取值范圍 String="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" #循環(huán)8次 for i in {1..8} do #每次循環(huán)隨機(jī)獲取0到字符串長度-1的下標(biāo)值 num=$[RANDOM % ${#String}] #進(jìn)行字符串截取 var=${String:num:1} #每次追加生成密碼 passwd+=$var done echo "本次生成的隨機(jī)密碼為:$passwd"
編寫腳本應(yīng)該注意的事項:
- 開頭指定使用什么shell,例如:bash,ksh,csh等
- 腳本功能描述,使用方法,作者,版本,日期等
- 變量名,函數(shù)名要有實際意義,函數(shù)名以動名詞形式,第二個單詞首字母要大寫。例如:updateConfig()
- 縮進(jìn)統(tǒng)一用4個空格,不用TAB
- 取變量值使用大括號,如${varname}
- 刪除文件時,如果路徑有變量的,要判斷變量有值,如rm -f ${abc}/* 如果變量abc沒有值,則會把根目錄下的文件刪除
- 腳本中盡量不要使用cd變換目錄
- 函數(shù)中也要有功能描述,使用依法,版本,日期等
- 函數(shù)的功能要單一,不要太復(fù)雜
- $()比` `更好
- 盡量不要使用多層if語句,而應(yīng)該以case語句替代
- 如果需要執(zhí)行確定次數(shù)的循環(huán),應(yīng)該用for語句替代while語句
- 輸入的參數(shù)要有正確性判斷
- 多加注釋,方便自己或他人閱讀。
總結(jié)
總的來說for循環(huán)還是比較簡單的只要理解他的固定格式就行
for 變量名 in 取值列表
do
命令序列
done
#用變量名去取值,然后挨個執(zhí)行命令,其實就是一個遍歷的過程
到此這篇關(guān)于shell編程中for循環(huán)語句實現(xiàn)的文章就介紹到這了,更多相關(guān)shell for循環(huán)語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ubuntu使用root用戶登錄/切換root權(quán)限的實現(xiàn)
下面小編就為大家?guī)硪黄猽buntu使用root用戶登錄/切換root權(quán)限的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01shell自定義函數(shù)及參數(shù)調(diào)用解析
與其它的腳本語言一樣,bash同樣支持函數(shù)。本文為大家介紹在bash中定義與使用函數(shù)的方法,有需要的朋友可以參考下2013-02-02Shell腳本實現(xiàn)監(jiān)視指定進(jìn)程的運行狀態(tài)
這篇文章主要介紹了Shell腳本實現(xiàn)監(jiān)視指定進(jìn)程的運行狀態(tài),本文直接給出腳本代碼,需要的朋友可以參考下2015-07-07