1、 shell中的循環語句
循環語句,主要是為了簡化重復動作代碼,在運維方面主要用於重復某項動作,例如批量創建用戶,在shell中主要有兩種 while循環 與 for 循環。
1、while循環
while 循環主要用於無限次的循環情況,例如登錄認證,你不知道多少次可以登錄成功,當然可以認為限制登錄次數。
1.1、while循環 的結構
#!/bin/bash
while true
do
echo "哈哈哈哈哈哈哈哈哈" #循環體
done
1.2、 while循環腳本示例
1)、while循環從文件讀取用戶,增加用戶,並且設置密碼。
1、創建用戶文件
[root@localhost ~]# cat >123.txt<<-EOF
love1
love2
love3
love4
love5
EOF
2、while 腳本
#!/bin/bash
rm -rf info.txt &>/dev/null
while read user
do
id $user &>/dev/null
if [ $? -ne 0 ];then
useradd $user &>/dev/null
pwd=`mkpasswd -l 10`
echo $pwd | passwd --stdin $user &>/dev/null
echo "$user:$pwd"|tee -a info.txt
echo " 用戶 $user 添加成功..."
else
echo "$user 已經存在..."
fi
done<123.txt
2)批量添加指定前綴,數量的用戶
#!/bin/bash
read -p "請輸入用戶前綴,密碼,數量:" pre pass num
if [[ ! $num =~ ^[0-9]+ ]];then
ehco "請輸入數字"
fi
cat <<EOF
你輸入的用戶名前綴為:$pre
你設立的密碼為:$pass
你設定用戶個數為:$num
EOF
while true
do
read -p "你確定要創建?" ch
case $ch in
y|yes)
for i in `seq $num`;do
id $pre$i &>/dev/null
if [ $? -ne 0 ];then
useradd $pre$i
echo "用戶 $pre$i 創建成功..."
echo $pass|passwd --stdin $pre$i &>/dev/null
else
continue
echo "用戶 $pre$i 已經存在..."
fi
done
break
;;
n|no)
exit 1
;;
*)
echo "錯誤輸入,請重新輸入..."
esac
done
3)、批量刪除用戶
#!/bin/bash
read -p "請輸入用戶前綴,數量:" pre num
cat <<EOF
你輸入的用戶名前綴為:$pre
你設定用戶個數為:$num
EOF
while true
do
read -p "你確定要刪除?" ch
case $ch in
y|yes)
for i in `seq $num`;do
id $pre$i &>/dev/null
if [ $? -eq 0 ];then
userdel -r $pre$i
echo "用戶 $pre$i 刪除成功..."
else
continue
echo "用戶 $pre$i 不存在..."
fi
done
break
;;
n|no)
exit 1
;;
*)
echo "錯誤輸入,請重新輸入..."
esac
done
2、for 循環
for 循環主要用於有限次數循環,例如測試一個網段內地ip是否通達,又或者我們要循環迭代一個文件的內容,我們可以for循環來完成工作
2.1 for 循環結構
for i in `seq 5` #可循環迭代的對象,例如一個打開的文件,{1..100}等
do
echo "haha $i" #循環體,for循環從中依次取值
done
2.2 for循環腳本
1)檢測子網段內ip的通達性
#!/bin/bash
for i in {1..200}
do
{
ip=100.100.100.$i
ping -c1 -w1 $ip
if [ $? -eq 0 ];then
echo "$ip"|tee -a ip.txt
fi
}&
done
wait
cat ip.txt
2)批量修改子網段ssh登陸密碼
#!/bin/bash
for i in {10..200}
do
{
ip=100.100.100.$i
ping -c1 -w1 $ip &>/dev/null
if [ $? -eq 0 ];then
ssh $ip "echo 123456 |passwd --stdin root" &>/dev/null
echo "$ip"|tee -a ch_ip.txt
else
echo "$ip"|tee -a er_ip.txt
fi
}&
done
3)、批量添加用戶
#!/bin/bash
read -p "請輸入用戶前綴,密碼,數量:" pre pass num
if [[ ! $num =~ ^[0-9]+ ]];then
ehco "請輸入數字"
fi
cat <<EOF
你輸入的用戶名前綴為:$pre
你設立的密碼為:$pass
你設定用戶個數為:$num
EOF
while true
do
read -p "你確定要創建?" ch
case $ch in
y|yes)
for i in `seq $num`;do
id $pre$i &>/dev/null
if [ $? -ne 0 ];then
useradd $pre$i
echo "用戶 $pre$i 創建成功..."
echo $pass|passwd --stdin $pre$i &>/dev/null
else
continue
echo "用戶 $pre$i 已經存在..."
fi
done
break
;;
n|no)
exit 1
;;
*)
echo "錯誤輸入,請重新輸入..."
esac
done
2、循環中用到的一些其他shell命令
1、break 結束循環
2、exit 退出整個腳本
3、continue 忽略本次循環剩余的代碼,直接進⾏下一次循環