for条件循环语句

2025-11-06 03:56:49

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.

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢