多语言展示
当前在线:1166今日阅读:176今日分享:34

for条件循环语句

for循环语句可以让脚本一次性读取多个信息值,然后逐一对信息值进行循环操作处理,因此当你要处理的数据是有目标和范围时简直再适合不过了~例如咱们使用for循环语句来从列表文件中读取多个用户名,然后逐一创建用户帐号并为其设置密码。详情请关注《linux就该这么学》。
工具/原料

一台装有RHEL 7.0操作系统的电脑

方法/步骤
1

首先创建用户名称的列表文件,将每个用户名称单独占一行,当然具体的用户名称和个数都是可以由您来决定的:[root@linuxprobe ~]# vim users.txt andy barry carl duke eric george

2

Shell脚本中使用read命令来读取用户输入的要设置密码值后赋值给PASSWD变量,并通过-p参数来显示一段给用户的提示内容,告诉用户正在输入的内容即将作为帐号密码。当下面的脚本执行后会自动的用users.txt列表文件中获取到所有的用户名称值,然后逐一使用id 用户名的方式查看用户的信息,并使用$?变量判断这条命令是否执行成功,也就是判断该用户是否已经存在。而/dev/null是被称作Linux的黑洞的文件,将输出信息重定向输出到这个文件后等同于删除数据,让我们用户的屏幕保持简洁。[root@linuxprobe ~]# vim Example.sh #!/bin/bash read -p 'Enter The Users Password : ' PASSWD for UNAME in `cat users.txt` do id $UNAME &> /dev/null if [ $? -eq 0 ] then echo 'Already exists' else useradd $UNAME &> /dev/null echo '$PASSWD' | passwd --stdin $UNAME &> /dev/null if [ $? -eq 0 ] then echo '$UNAME , Create success' else echo '$UNAME , Create failure' fi fi done

3

执行批量创建用户的Shell脚本程序,在输入为帐户设定的密码口令后将由脚本全自动的检查并创建这些帐号,因为已经将多余的信息通过输出重定向转移到了黑洞文件中,因此我们的屏幕除了用户创建成功的提示后不会有其他的内容。/etc/passwd是用来保存Linux系统中用户帐号信息的文件,因此如果不放心的话可以手动的再看下这个文件中有无这些新用户的信息,同时这也又回归到了前面三章中重复提到了一个概念——Linux系统中的一切都是文件。[root@linuxprobe ~]# bash Example.sh Enter The Users Password : linuxprobe andy , Create success barry , Create success carl , Create success duke , Create success eric , Create success george , Create success [root@linuxprobe ~]# tail -6 /etc/passwd andy:x:1001:1001::/home/andy:/bin/bash barry:x:1002:1002::/home/barry:/bin/bash carl:x:1003:1003::/home/carl:/bin/bash duke:x:1004:1004::/home/duke:/bin/bash eric:x:1005:1005::/home/eric:/bin/bash george:x:1006:1006::/home/george:/bin/bash

4

你还记得刚刚在双分支if条件语句学习中那个用于测试对方主机是否在线的脚本吗?既然现在已经掌握了for循环语句,不妨做些更酷的事情,比如来试试让脚本自动的从文本中读取主机列表,然后进行自动逐个测试对方是否在线吧~首先我们创建出一个主机的列表文件:[root@linuxprobe ~]# vim ipadds.txt 192.168.10.10 192.168.10.11 192.168.10.12

5

然后我们通过将前面双分支if条件语句与for循环语句做结合,让脚本自动的从上面主机列表文件中读取IP地址并赋值给HLIST变量,从而通过判断ping命令后执行的返回值来进行逐个的测试对方主机是否在线。其中出现的$(命令)是一种完全类似于第三章转义符中反引号`命令`的Shell操作符,效果同样是执行括号或双引号内的命令,这样平时咱们写脚本的时候会多学习几种类似的新方法,便于在工作中大显身手:[root@linuxprobe ~]# vim CheckHosts.sh #!/bin/bash HLIST=$(cat ~/ipadds.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@linuxprobe ~]# ./CheckHosts.sh Host 192.168.10.10 is On-line. Host 192.168.10.11 is Off-line. Host 192.168.10.12 is Off-line.

推荐信息