循环控制语句

循环控制语句

双层循环和循环控制语句,while和until的语法使用

循环控制,

continue:跳出当次,后续的条件成立,继续执行

break:一旦break,后续条件不执行

exit:满足条件立刻退出

echo 打印

-n 不换行输出

-e 输出转义字符

\b:相当于退格键(backspace)

\n 换行,相当于回车

\f 换行,换行后的新行的开头连着上一行的行尾

\t 相当于tab键 横向制表符

echo -ne 既换行输出也输出转义字符

while和until的语法:

while满足条件就执行循环,不满足条件才会退出。

死循环,不知道循环多少次,需要主动结束循环或者达到条件结束循环。

while [判断条件]

do

命令序列

done

死循环:

while true # 永远为真,死循环

while [ 1 -eq 1 ]

while:

until循环:条件不满足执行循环,一旦条件成立,循环终止。

until [ 条件测试]

do

命令序列

done

less 复制代码
#测试一个网段,c类的私有地址32位的网段,测试可以ping通的保留到/opt/hosts.txt,ping
#不通,提示不通即可。

#for num in {1..254}
#{
#do
#    hostip="192.168.11.$num"
#    ping -c 2 -i 0.5 -W 2 $hostip 
#    if [ $? -eq 0 ]
#    then
#       echo "$hostip is online" >> /opt/hosts.txt
#    else
#      echo "不通"
#    fi
#}&
#把整个循环体的代码看做一整个内容,相当于并行,&将成立的内容放到后台进行
#done
#wait
#wait是执行结束之后,直接突出,并发执行

练习题:

less 复制代码
#用户名存放在users.txt文件中,每行一个。判断文件里的用户名是否存在
#如果用户用户存在,提示用户已存在
#用户存在,但是没有设置密码,要提示用户设置密码
#用户不存在,创建用户,然后给用户创建密码
#cat /etc/passwd | awk -F: '{print $1}' | grep "$user"
#cat /etc/shadow | grep "$user" | awk -F: '{print $2}'


for user in $(cat /opt/users.txt)
do
cat /etc/passwd | awk -F: '{print $1}' | grep "$user" 
if [[ $? -eq 0 ]] 
then        
 echo "用户名存在"
 mima=$(cat /etc/shadow | grep "$user" | awk -F: '{print $2}')
 if [ "$mima" == "!!" ] || [ -z "$mima" ]
 then         
  echo "用户没有设置密码,请设置密码"
 fi
else
 echo "用户名不存在,请创建用户名和密码"
 echo "创建用户,用户密码123456"
 useradd -n $user
 echo 123456 | passwd --stdin $user
fi  
done
~                   
less 复制代码
#使用循环语句,将一个0-255的十进制数转换8位的二进制数:

num=$((RANDOM % 256))
echo "生成的随机数: $num"
a=256

for ((i=1;i<=8;i++))
do
a=$[a / 2]
b=$[num - a] 
if [ $b -lt 0 ] 
then        
echo -n 0   
else        
echo -n 1  
# 128 64 32  16 8 4 2 1 随机数层层相减,大于则输出1 小于输出0 
let num-=$a   
fi    
done
echo ''
~               
less 复制代码
#使用循环语句,将一个0-255的十进制数转换8位的二进制数:

read -p "请输入一个0-255的十进制数:" num
jinzhi=""
for (( i=1;i<=8 ;i++ ))
do
  if [[ $num -gt 0   ]]
then
  num2=$(( num % 2 ))
  jinzhi=$num2$jinzhi
  num=$(( num /2  ))
else
  jinzhi=0$jinzhi
fi
done
echo "十进制数转换为8位二进制数结果为:$jinzhi"
相关推荐
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
七夜zippoe2 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥2 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿2 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘3 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
会员源码网3 小时前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发
米羊1213 小时前
已有安全措施确认(上)
大数据·网络
Fcy6483 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满3 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠4 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法