循环
双层循环
双层循环和循环控制语句的使用,while和until的语法使用
echo 打印
-n 表示不换行输出
-e 输出转义字符
\b 相当于退格键(backspace)
\n 换行,相当于回车
\f 换行,换行后的新行的开头连着上一行的行尾
\t 相当于tab键 ,横向制表符
ehco -ne
exit:满足条件,立刻退出,无论几层循环
break:仅跳出当前循环
continue :仅跳满足条件的,后续可以继续运行
(break和continue后可以加数字表示跳出几次)
#倒等腰三角形 for ((i=6;i>=1;i--)) do for ((j=6;j>=i;j--)) do echo -n " " done for ((k=1;k<=2*i-1;k++)) do echo -n "*" done echo done
运行结果:
[root@localhost for]# sh b.sh *********** ********* ******* ***** *** *
while和until的语法
while语法
while满足条件就执行循环,不满足条件才会退出。
死循环,不知道循环多少次,需要主动结束循环或达到条件才结束循环。
while [判断条件] do 命令序列 done
死循环:
while true #永远为真,死循环 while [ 1 -eq 1 ] while :
until循环
until循环:条件不满足才执行循环,一旦条件成立,循环终止。
until [条件测试] do 命令序列 done
#测试一个网段,c类的私有地址,32位的网段,测试可以ping通的保留到/opt/hosts.txt,ping不通,提示不通即可。 read -p "请输入一个网段的开头(192.168.60.):" ip for ((i=1;i<=254;i++)) do { ping -c 2 $ip$i if [ $? -eq 0 ] then echo 192.168.60.$i >> /opt/hosts.txt else echo "不通" fi }& #把整个循环体的代码看作一个整个内容,相当于并行,&循环成立的内容放入后台执行 done wait #wait的执行结果之后,直接退出。并发执行
cat /etc/passwd | awk -F: '{print $1}' | grep "dn" #查看有没有dn这个用户名 cat /etc/shadow | grep "dn" | awk -F: '{print $2}' #查看dn这个用户有没有密码
作业1
用户名存放在users.txt文件中,每行一个。判断文件里的用户名是否存在
如果用户用户存在,提示用户已存在
用户存在,但是没有设置密码,要提示用户设置密码
用户不存在,创建用户,然后给用户创建密码
#用户名存放在users.txt文件中,每行一个。判断文件里的用户名是否存在 #如果用户用户存在,提示用户已存在 #用户存在,但是没有设置密码,要提示用户设置密码 #用户不存在,创建用户,然后给用户创建密码 for user in $(cat /opt/users.txt) do cat /etc/passwd | awk -F : '{print $1}' | grep "$user" if [[ $? -eq 0 ]] then echo "$user 用户已存在!" mima=$(cat /etc/shadow | grep "$user" | awk -F: '{print $2}') if [[ "$mima" == "!!" || -z "$mima" ]] then echo "$user 该账户没有密码。请设置密码" echo 123 | passwd --stdin $user echo "$user 密码已设置" fi else useradd $user echo 123 | passwd --stdin $user fi done
运行结果
[root@localhost opt]# sh g.sh dn dn 用户已存在! xy102 xy102 用户已存在! bb bb 用户已存在! bb 该账户没有密码。请设置密码 更改用户 bb 的密码 。 passwd:所有的身份验证令牌已经成功更新。 bb 密码已设置 cc cc 用户已存在! cc 该账户没有密码。请设置密码 更改用户 cc 的密码 。 passwd:所有的身份验证令牌已经成功更新。 cc 密码已设置 更改用户 xy105 的密码 。 passwd:所有的身份验证令牌已经成功更新。 更改用户 xy106 的密码 。 passwd:所有的身份验证令牌已经成功更新。
作业2:
使用循环语句,将一个0-255的十进制数转换8位的二进制数:
#使用循环语句,将一个0-255的十进制数转换8位的二进制数: num=$((RANDOM%256)) echo "随机生成的10位数是:" $num for ((i=1;i<=8;i++)) do j=$(($num%2))$j num=$(($num/2)) done echo $j
运行结果:
[root@localhost opt]# sh h.sh 随机生成的10位数是: 180 10110100 [root@localhost opt]# sh h.sh 随机生成的10位数是: 152 10011000 [root@localhost opt]# sh h.sh 随机生成的10位数是: 248 11111000 [root@localhost opt]# vim h.sh [root@localhost opt]# vim h.sh [root@localhost opt]# sh h.sh