shell之循环语句

目录

循环和遍历

什么是循环和遍历

循环的特点

循环语句

for循环语句

语法结构

类c语言格式

双重for循环

while循环语句

until循环语句

循环控制语句

 其他

并行执行

echo命令

随机数变量 

实验 

例一

例二

例三


循环和遍历

什么是循环和遍历

循环

循环是重复执行一段代码的结构,通过循环可以在满足一定的条件之下多次执行相同的代码

循环体,代码的总结构。循环条件,当循环条件满足时,循环体内的代码才会执行,条件不满足,循环结束。

遍历

对数据结构中的每个元素都进行一次访问的过程。进行操作或输出。

总结:循环和遍历是结合在一起使用的,循环实际上是一种控制流程的结构,用于重复执行代码,遍历是对数据进行访问和操控的过程。

循环的特点

1.重复执行代码
2.简化程序的逻辑,提高程序的可读性和可理解性,降低了代码出错的可能
3.提高了代码的重复利用率
4.提高了效率,循环可以自动化的让程序执行,减少了人工的干预。

循环的作用就是为了批量的执行代码的一种方式,减少人工干预,提高效率


循环语句

for循环语句

读取不同的变量值,用来重复执行同一组命令
for循环主要用于已知次数的循环

语法结构

for 变量名(不是引用变量) in 取值范围
do 
  命令序列,对取值范围内的变量进行特定的操作
done  循环结束的标志

类c语言格式

for ((表达式1;表达式2;表达式3))
do
  命令序列
done

注 for ((;;))是死循环

双重for循环

for 变量名(不是引用变量) in 取值范围
do 
    for
    do
        
    done
done

 循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,例如在for循环语句中,可以再嵌套一个for 循环,这样的 for 循环语句我们称之为双重for循环。

外面大循环,大循环控制整个循环的次数,大循环打印的是行,内循环控制的是列 

while循环语句

满足条件才会执行循环,不满足结束循环
用于不知道循环次数,需要主动结束循环或达到条件循环的场景

while [ 条件判断 ]
do
  命令序列
done

死循环
while ture 
while [ 1 -eq  1 ]

until循环语句

重复测试某个条件,当判断条件不成立时进行循环,条件成立停止循环

until [ 条件测试语句 ]
do 
  命令序列
done

循环控制语句

break
满足条件触发后,会立刻跳出,即使后面还有条件,也不再执行,整个循环结束。

continue
满足条件触发后,只会跳出这一次循环,如果后面的循环条件依然存在,继续执行

exit 直接退出,后续代码不再执行,整个脚本立刻终止

 其他

并行执行
 

{
#命令
}&  
wait

wait执行结束不等代直接退出

echo命令

echo -n 不换行输出
echo -e 可以使用转义符
\b  删除键
\n  换行输出
\t   相当于tab键的空格
\c   不换行输出,字符过长会导致字符不输出

随机数变量 

$RANDOM 只能表示一个随机整数
默认范围:0-32767
$((RANDOM%100))   1-99
$((RANDOM%1000+1))     1-1000

实验 

例一

有一家店,衣服 500,裤子 400,鞋子 300,帽子 200,袜子 100。
每次选购完成之后都要提示用户是否继续购买,如果用户不买了,要提示结算金额,你消费了多少
如果继续买,就继续添加商品,最后也要给一个总金额。

sum=0
while true
do
echo "衣服500 裤子400 鞋子300 帽子200 袜子100 "
read -p "买什么" shoping

if [ "$shoping" == "衣服" ]
   then
  sum=$(($sum+500))
elif [ "$shoping" == "裤子" ]
    then
  sum=$(($sum+400))
elif [ "$shoping" == "鞋子" ]
    then
  sum=$(($sum+300))
elif [ "$shoping" == "帽子" ]
    then
  sum=$(($sum+200))
elif [ "$shoping" == "袜子" ]
    then
  sum=$(($sum+100))
else
echo "输入错误"
fi
echo "总金额为${sum}"
read -p "是否继续购买 yes/no" a
if [ "$a" = "yes" ]
  then
  continue
  else
  echo "总金额为${sum}"
  break
fi
done

例二

 用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,
输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;
若该用户不存在,提示用户输入密码,建立用户并设立其密码

for user in  $(cat /opt/users.txt)
 do
  cat /etc/passwd | awk -F: '{print $1}' | grep -w  "${user}"
 if [ $? -eq 0 ]
   then
    echo "${user}用户存在"
 cat /etc/shadow | grep "${user}" |  awk -F: '{print $2}' | grep '!!'
   if [ $? -eq 0 ]
     then
        echo "无密码"
       read -p "请输入${user}密码" mima
       echo "$mima" | passwd --stdin ${user}
     else
    echo "有密码"   
  fi
else
 echo "${user}用户不存在,建立用户"
 useradd "$user"
 read -p "请输入密码" mima
       echo "$mima" | passwd --stdin ${user}
 fi
done

例三

使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数

read -p "输入0-255的数:" num
a=128
for ((i=1;i<=8;i++))
  do
b=$(($num-$a))
if [[ $b -lt 0 ]]
then
echo -n "0"
else
num="$b"
echo -n "1"
fi
a=$(($a/2))
done

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值