(1)若:data.txt的內容如下:
yang 123
tianyun 123
相當於:
for line in `cat data.txt`
等價於:for line in yang 123 tianyun 123for默認是以空格進行分割的,循環4次,
(2)IFS='\n'for line in `cat data.txt`
等價於:for line in"yang 123""tianyun 123"
循環2次
2.for語法結構
shell
for 變量名 [in 取值列表]
do
循環體
done
C語言
for((初值;條件;步長))
do
循環體
done
eg:for實現批量主機ping探測
#!/usr/bin/bash#ping check>ip.txt
## i=2,3,..... for i in{2..254}## for i in `seq 2 254`產生序列
do
{
ip=192.168.122.$i
ping -c1 -W1 $ip &>/dev/null ## -W1表示1秒超時if[ $? -eq 0];then
echo "$ip"|tee -a ip.txt## tee既顯示在屏幕上,又搞到文件裏面去
fi
}&###如果這裏不加&,那麼該執行腳本的進程會被阻塞在這裏,ctrl C都沒用
done
wait ##等待所有的後臺進程執行結束,如果不加這裏,有些ping執行不成功,就會執行echo "finish"
echo "finish"
time ping.sh執行腳本後,可以查看腳本的運行時間;
eg:ping一個文件中的所有主機
ip.txt內容如下:
10.45.1.1010.22.11.1#!/usr/bin/bashfor i in `cat ip.txt`
do
ping -c1 -W1 $ip &>/dev/null ## -W1表示1秒超時if[ $? -eq 0];then
echo "$ip is up"else
echo "$ip is down"
fi
done
wait ##等待所有的後臺進程執行結束,如果不加這裏,有些ping執行不成功,就會執行echo "finish"
echo "finish"
eg3:批量創建賬號
#!/usr/bin/bash#v1.0 by jiwangwhile:
do
read -p "Please enter prefix & password & num[tianyun 123 4]" prefix pass num
echo "user information:===========
user prefix:$prefix
user pass:$pass
user num:$num
===========
"
read -p "Are you sure?[y/n]" action
if["$action"="y"];then
break
fi
done
echo "creat user"## seq -w 10等位補齊,01,02.。。。。###for i in {1..$num}這個不對,#num的內容不會顯示for i in `seq -w $num`
do
user=$prefix$i
id $user &>/dev/null
if[ $? -eq 0];then
echo "$user exists"else
useradd $user
echo "$pass"|passwd --stdin $user &>/dev/null
if[ $? -eq 0];then
echo "$user is created"
fi
fi
done