For循环
for 变量名 in [ 取值列表 ]
do
循环体
done
#!/bin/bash
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!!!"
- For循环体中加入
{}&
可实现并发执行,不会阻塞当前shell;
-
wait
保证所有的ip全部ping完成,才会执行下面的打印语句;
案例:批量创建用户
#!/bin/bash
read -p "请输入用户名前缀|密码|数量: " prefix password num
if [[ ! $num =~ ^[0-9]+$ ]]; then
echo "Error 请重新输入数字"
fi
cat <<-EOF
您输入的用户名前缀是: $prefix
您输入的统一密码是: $password
您输入要创建的用户数量是: $num
EOF
read -p "您确定要创建吗? [y|n]" already
case $already in
y|Y|yes|YES)
for i in $(seq $num)
do
user_name=$prefix$i
id $user_name &>/dev/null
if [ $? -ne 1 ]; then
useradd $user_name && \
echo "$password|passwd --stdin $user_name" &>/dev/null
echo "$user_name is OK!!!"
fi
done
;;
n|N|no|NO)
exit 1
;;
*)
read -p "您确定要创建吗? [y|n]" already
esac
-
for i in $(seq $num)
:保证num从1开始依次递增;
-
id $user_name &>/dev/null
:获取指定的用户user_name的信息,不显示出来,全输入为null;
案例:以读文件的方式批量创建用户
SF
Liyanyan
Lijiajia
WGM
- 然后创建脚本文件
for_user02.sh
,内容如下:
#!/bin/bash
for i in $(cat user.txt)
do
id $i &>/dev/null
if [ $? -ne 0 ]; then
useradd $i && \
echo "asd123" |passwd --stdin $i &>/dev/null
echo "$i is OK!!!"
else
echo "$i create fail!!!"
fi
done
-
$(cat user.txt)
:直接读取用户文件user.txt
中的内容;
While循环
while 条件语句
do
循环体
done
案例:读入文件用户密码创建用户
- 首先创建用户密码文件
user02.txt
,内容如下:
SF asd123
Liyanyan asd123
Lijiajia asd123456
WGM asd123456789
XHF asd1234
LXY asd12
- 用户名与密码之间 空格 隔开;
- 然后创建脚本文件
while_user02.sh
,内容如下:
#!/bin/bash
while read user
do
u=$(echo $user|awk '{print $1}')
p=$(echo $user|awk '{print $2}')
id $u &>/dev/null
if [ $? -ne 0 ]; then
useradd $u && \
echo "$p"|passwd --stdin $u &>/dev/null
echo "$u is OK!!!"
else
echo "$u is already!!!"
fi
done < user02.txt
-
done < user.txt
:表示从 user.txt文件中读取内容,然后每一行赋值给变量user
;
-
u
与p
分别表示用户名与密码;
Shell内置命令
- exit:退出整个程序;
- break:结束当前循环;
- continue:结束当前循环语句,接着进入下次循环;
网友评论