循環語句,主要是爲了簡化重複動做代碼,在運維方面主要用於重複某項動做,例如批量建立用戶,在shell中主要有兩種 while循環 與 for 循環。shell
while 循環主要用於無限次的循環狀況,例如登陸認證,你不知道多少次能夠登陸成功,固然能夠認爲限制登陸次數。bash
#!/bin/bash while true do echo "哈哈哈哈哈哈哈哈哈" #循環體 done
1)、while循環從文件讀取用戶,增長用戶,而且設置密碼。運維
一、建立用戶文件 [root@localhost ~]# cat >123.txt<<-EOF love1 love2 love3 love4 love5 EOF 二、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)批量添加指定前綴,數量的用戶ssh
#!/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
for 循環主要用於有限次數循環,例如測試一個網段內地ip是否通達,又或者咱們要循環迭代一個文件的內容,咱們能夠for循環來完成工做code
for i in `seq 5` #可循環迭代的對象,例如一個打開的文件,{1..100}等 do echo "haha $i" #循環體,for循環從中依次取值 done
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登錄密碼ip
#!/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)、批量添加用戶it
#!/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
一、break 結束循環 二、exit 退出整個腳本 三、continue 忽略本次循環剩餘的代碼,直接進⾏下一次循環