(4.5)For空行的祕密

1.for空行

  • for默認是對空行是不感冒的,對他而言就是空的
  • eg:
1)若:data.txt的內容如下:
yang 123

tianyun 123    

相當於:
for line in `cat data.txt`
等價於:for line in yang 123        tianyun 123
for默認是以空格進行分割的,循環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.10
10.22.11.1

#!/usr/bin/bash
for 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 jiwang
while :
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章