
Shell循环语句
1.For循环语句
1.for循环基础语法
for 变量名 in [ 取值列表 ] do 循环体 done2.for案例, 批量探测主机存活状态
# cat for_ip.sh #循环主机 for i in {1..254} do #并发执行 { ip=192.168.70.$i ping -c1 -W1 $ip &>/dev/null if [ $? -eq 0 ];then echo "$ip" |tee -a ip.txt fi }& done #等待前台进程结束,在往后执行 wait echo "Get IP Is Finsh!!"4.for循环批量创建用户
#!/usr/bin/bash read -p "请输入用户名前缀|密码|数量: " rep pass num if [[ ! $num =~ ^[0-9]+$ ]];then echo "Error 请重新输入数字" fi cat <<-EOF 你输入的用户名前缀是: $rep 你输入的统一密码是: $pass 你输入要创建的数量: $num EOF read -p "你确定要创建吗? [y|n]" aredy case $aredy in y|Y|yes|YES) for i in $(seq $num) do username=$rep$i id $usernme &>/dev/null if [ $? -ne 1 ];then useradd $username && \ echo "$pass"|passwd --stdin $username &>/dev/null echo "$username Is OK!" fi done ;; n|N|No|NO) exit 1 ;; *) read -p "你确定要创建吗? [y|n]" aredy esac5.for循环通过文件批量创建用户
#!/usr/bin/bash for i in $(cat user.tt) do id $i &>/dev/null if [ $? -ne 0 ];then useradd $i && \ echo "123" |passwd --stdin $i &>/dev/null echo "$i Is OK" else echo "$i is Create Faile!!!" fi done 6.批量修改密码 #!/usr/bin/bash for i in {160..162} do ip=192.168.70.$i ping -c1 -W1 $ip &>/dev/null if [ $? -eq 0 ];then ssh $ip "echo 1|passwd --stdin root" &>/dev/null echo "$ip: Is Passwod Successfuly" fi done
2.While循环语句
while循环基础语法
//当条件测试成立(条件测试为真),执行循环体 while 条件测试 do 循环体 done1.使用while创建用户
#!/usr/bin/bash while read user do id $user &>/dev/null if [ $? -eq 0 ];then echo "useradd $user is already exists" else useradd $user &>/dev/null echo "useradd $user is Created." fi done<user.tt #文件中存在用户和密码 #!/usr/bin/bash while read user do u=$(echo $user|awk '{print $1}') p=$(echo $user|awk '{print $2}') id $u &>/dev/null if [ $? -eq 0 ];then echo "useradd $u is already exists" else useradd $u &&\ echo "$p"|passwd --stdin $u &>/dev/null echo "useradd $u is Created Passwd Is Ok." fi done<user2.tt
3.Shell内置命令
- exit 退出整个程序
- break 结束当前循环,或跳出本层循环
- continue 忽略本次循环剩余的代码,直接进行下一次循环
exit示例
#!/usr/bin/bash while true do echo "123" exit echo "456" done echo "Done....." #执行后的结果 [root@Shell ~]# sh test.sh 123break示例
#!/usr/bin/bash while true do echo "123" break echo "456" done echo "Done....." #执行后的结果 [root@ansible-node30 ~]# sh test.sh 123 Done.....