12.for 条件循环语句 (3)

文章介绍了如何使用Bash脚本通过for循环读取用户列表创建账户,同时利用ping命令检测主机在线状态。脚本展示了如何结合if条件和for循环,以及如何使用Shell命令和Linux工具如/dev/null进行输出管理。
摘要由CSDN通过智能技术生成

for 循环语句

允许脚本一次性读取多个信息,然后逐一对信息进行操作处理。当要处理的数据有范围时,使用for循环语句。

         使用 for 循环语句从列表文件中读取多个用户名,然后为其逐一创建用户账户并设 置密码。首先创建用户名称的列表文件users.txt,每个用户名称单独一行。

[root@localhost ~]# cat users.txt
marry
xiaoming
xiaohong
trick1
trick2
trick3
trick4
trick5
trick6
trick7

         在脚本中使用 read 命令读取用户输入的密码值,然 后赋值给PASSWD变量,

        并通过-p参数向用户显示一段提示信息,告诉用户正在输入的内容 即将作为账户密码。

        在执行该脚本后,会自动使用从列表文件 users.txt 中获取到所有的用户 名称,

        然后逐一使用“id用户名”命令查看用户的信息,并使用$?判断这条命令是否执行成 功,也就是判断该用户是否已经存在。

        在输入为账户设定的密码后将由脚本自动检查 并创建这些账户。

        由于已经将多余的信息通过输出重定向符转移到了/dev/null黑洞文件中,

        因此 在正常情况下屏幕窗口除了“用户账户创建成功”(Create success)的提示后不会有其他内容

[root@localhost ~]# cat addusers.sh
#!/bin/bash
read -p "输入你的密码:" PASSWD
for UNAME in `cat users.txt`
do
        id $UNAME &> /dev/null
        if [ $? -eq 0 ]
        then
                echo "$UNAME , ALready exists"
        else
                useradd $UNAME &> /dev/null
                echo "$PASSWD" | passwd --stdin &> /dev/null
                echo "$UNAME , create success"
        fi
done
[root@localhost ~]# bash addusers.sh
输入你的密码:123456
marry , create success
xiaoming , create success
xiaohong , create success
trick1 , create success
trick2 , create success
trick3 , create success
trick4 , create success
trick5 , create success
trick6 , create success
trick7 , create success

        /dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删 除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁。

 创建成功

[root@localhost ~]# tail -10 /etc/passwd
marry:x:1001:1001::/home/marry:/bin/bash
xiaoming:x:1002:1002::/home/xiaoming:/bin/bash
xiaohong:x:1003:1003::/home/xiaohong:/bin/bash
trick1:x:1004:1004::/home/trick1:/bin/bash
trick2:x:1005:1005::/home/trick2:/bin/bash
trick3:x:1006:1006::/home/trick3:/bin/bash
trick4:x:1007:1007::/home/trick4:/bin/bash
trick5:x:1008:1008::/home/trick5:/bin/bash
trick6:x:1009:1009::/home/trick6:/bin/bash
trick7:x:1010:1010::/home/trick7:/bin/bash

for语句和if结合

测试主机是否在线

准备主机列表文件

[root@localhost ~]# cat ip.txt
192.168.10.1
192.168.20.1
[root@localhost ~]# cat  checkhosts.sh
#!/bin/bash
HLIST=$(cat ~/ip.txt)
for IP in $HLIST
do
        ping -c 3 -i 0.2 -w 3 $IP &> /dev/null
        if [ $? -eq 0 ]
        then
                echo "Host $IP is On-line"
        else
                echo "Host $IP is Off-line"
        fi
done

[root@localhost ~]# bash checkhosts.sh
Host 192.168.10.1 is Off-line
Host 192.168.20.1 is On-line

 

        将前面的双分支if条件语句与for循环语句相结合,让脚本从主机列表文件 ip.txt中自动读取IP地址(用来表示主机)并将其赋值给HLIST变量,从而通过判断ping 命令执行后的返回值来逐个测试主机是否在线。

        脚本中出现的“$(命令)”是一种完全类似于转义字符中反引号`命令`的Shell操作符,效果同样是执行括号或双引号括起来的 字符串中的命令。

        Shell脚本中的代码缩进格式会根据不同的语句而改变。这是由 Vim编辑器自动完成的,用户无须进行额外操作

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trick♂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值