双层循环和while和until语句

循环

双层循环

双层循环和循环控制语句的使用,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 
相关推荐
大霞上仙几秒前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
weixin_4426434219 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
Karoku06636 分钟前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子40 分钟前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
半桶水专家41 分钟前
用go实现创建WebSocket服务器
服务器·websocket·golang
布值倒区什么name1 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
孤客网络科技工作室1 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
。puppy2 小时前
HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,OSPF(静态路由,环回,缺省,空接口),NAT
运维·服务器
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev2 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理