Shell第三章《for循环》

语法结构:

for    变量名      [ in 取值列表 ]
do
循环体
done

需求:自动创建10个用户

#!/bin/bash
read -p "请输入你要创建的用户名:" name
read -p "请输入你要创建用户的数量:" num
for i in seq $num
do
useradd ${name}${i}
done
tail -$num /etc/passwd
[root@bogon ~]# sh user.sh
请输入你要创建的用户名:ccc
请输入你要创建用户的数量:3
ccc1:x:1014:1014::/home/ccc1:/bin/bash
ccc2:x:1015:1015::/home/ccc2:/bin/bash
ccc3:x:1016:1016::/home/ccc3:/bin/bash
[root@bogon ~]#

通过循环工具,探测全网主机。将在线主机记录在文本中。

思路:

1、编写一个常规的ping测试脚本(无循环)
2、添加循环语句 for i in {2..254}
3、优化脚本(让脚本后台执行,清空脚本,循环完成提示,wait间隔)

思路1:编写常规网络测试脚本

#!/bin/bash
ip=192.168.51.202
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo ${ip} | tee -a ip.txt
fi
[root@bogon ~]# sh ping.sh
192.168.51.202
[root@bogon ~]# cat ip.txt
192.168.51.202

思路2:因为测试对象多,所以使用循环。

#!/bin/bash
for i in {2..254}
do
ip=192.168.51.$i
ping -c1 -W1 ${ip} &> /dev/null
if [ $? -eq 0 ];then
echo ${ip} | tee -a ip.txt
fi
done
[root@bogon ~]# cat ip.txt
192.168.51.202
192.168.51.202
192.168.51.19
192.168.51.20
192.168.51.21
192.168.51.22
192.168.51.23

思路3:优化脚本(后台执行,清空脚本,wait间隔)

#!/bin/bash
>ip.txt ##清空文本
for i in {2..254}
do
{
ip=192.168.51.$i
ping -c1 -W1 ${ip} &> /dev/null
if [ $? -eq 0 ];then
    echo ${ip} | tee -a ip.txt
fi
}& ##后台运行
done
wait ##等待前一个程序执行完毕,在执行下一个
[root@bogon ~]# cat ip.txt
192.168.51.20
192.168.51.21
192.168.51.22
192.168.51.23
192.168.51.19
192.168.51.25
192.168.51.24
192.168.51.27
192.168.51.26
192.168.51.28
案例1: 通过用户列表文件创建用户
[root@localhost  scripts]# cat user.txt
qianqian
qianfeng
fengfeng
示例:
#!/bin/bash
for user in cat user.txt
do
useradd $user
echo "$user is created"
done
升级:
用户可以使用参数的形式,自定义用户名文件。
如果用户没有输入用户名文件,提示用户输入
如果用户输入的不是文件,提示用户更正。
启动循环创建用户
如果用户已经存在,提示存在
如果用户不存在,则创建成功,提示成功
[root@bogon ~]# cat user.txt
zhangshan
wangxu
likui
[root@bogon ~]#

#!/bin/bash
passwd=123
#判断脚本是否有参数
if [ $# -eq 0 ];then
      echo "usage:$0 filename"
      exit 1
fi
#判断用户输入的是否是文件
if [ ! -f $1 ];then
       echo "error filename"
       exit 2
fi
#设置循环,读取文件,创建用户
for user in cat $1
do
       id $user &> /dev/null
#如果用户不存在则创建用户,否则提示已存在
if [ $? -eq 0 ];then
echo "user $user already exists"
else
    useradd $user
    echo "passwd" | passwd --stdin $user &> /dev/null
#判断用户是否创建成功,并提示
if [ $? -eq 0 ];then
echo "user is created."
fi
fi
done

[root@bogon ~]# sh ccc.sh user.txt
user is created.

user is created.

user is created.

[root@bogon ~]#
[root@bogon ~]#
[root@bogon ~]# sh ccc.sh user.txt
user zhangshan already exists
user wangxu already exists
user likui already exists
[root@bogon ~]# sh ccc.sh
usage:ccc.sh filename

Original: https://www.cnblogs.com/Jqazc/p/16627780.html
Author: 我真的兔了
Title: Shell第三章《for循环》

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578415/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球