循环
for 语句
格式:
for 变量名 in 取值列表;
do
命令
done
示例:输出1 2 3
#!/bin/bash
for i in {1..3};
do
echo $i done
# bash test.sh
1
2
3
for 循环还有一种 C 语言风格的语法,常用于计数、打印数字序列:
#!/bin/bash
for ((i=1;i<=5;i++));
do
echo $i
done
示例:检查多个主机是否存活
#!/bin/bash
for ip in 192.168.1.{1..254};
do
if ping -c 1 $ip >/dev/null;
then
echo "$ip OK."
else
echo "$ip NO!"
fi
done
while 语句
格式:
while 条件表达式;
do
命令
done
示例: 输出1-5
#!/bin/bash
N=0
while [ $N -lt 5 ];
do
let N++
echo $N
done
# bash test.sh
1
2
3
4
5
示例 2:条件表达式为 true,将会产生死循环
#!/bin/bash
while [ 1 -eq 1 ];
do
echo "yes"
done
break 和 continue 语句
break 是终止循环。
continue 是跳出当前循环。
示例 1:在死循环中,满足条件终止循环
#!/bin/bash
N=0
while true;
do
let N++
if [ $N -eq 5 ];
then
break
fi
echo $N
done
# bash test.sh
1
2
3
4
示例 2:举例子说明 continue 用法
#!/bin/bash
N=0
while [ $N -lt 5 ];
do
let N++
if [ $N -eq 3 ];
then continue
fi
echo $N
done
# bash test.sh
1
2
4
5
注意:continue 与 break 语句只能循环语句中使用。
select 语句
select 是一个类似于 for 循环的语句。
格式:
select 变量 in 选项 1 选项 2;
do
break
done
示例:
#!/bin/bash
select mysql_version in 5.1 5.6;
do
echo $mysql_version
done
# bash test.sh
1) 5.1
2) 5.6
#? 1 5.1
#? 2 5.6
用
户输入编号会直接赋值给变量 mysql_version。作为菜单用的话,循环第二次后就不再显示菜单 了,并不能满足需求。
实验:
for创建20用户
用户前缀由用户输入
用户初始密码由用户输入
例如:test01,test10
(1)创建脚本文件
[root@localhost scripts]# vim add_user.sh
(2)编写脚本
#!/bin/bash
##############################################################
# File Name: add_user.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.youkuaiyun.com/ens33?type=blog
# Created Time : 2024-12-21 15:22:52
# Description:
###############################################################
read -p "请输入用户名前缀:" u
read -p "请输入初始密码:" p
for i in {01..20} #循环定义变量
do
if ! id -u ${u}${i} &>/dev/null #判断$u$i的用户是否不存在(!)
then
useradd ${u}${i} #若不存在,则创建角色
echo ${p} | passwd --stdin ${u}${i} &>/dev/null #修改密码,结果不输出
else
echo "this $u$i 存在" #否则用户存在
fi
done
(3)测试


再次执行
4737

被折叠的 条评论
为什么被折叠?



