shell 循环

一、echo

表示不换行输出
echo -n

输出转义字符,将转义后的内容输出到屏幕上
echo -e

常用的转义字符如下:

字符说明
\b转义后相当于按退格键(backspace),但前提是"\b"后面存在字符; “\b"表 示删除前一个字符,”\b\b"表示 删除前两个字符
\c不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo -n;但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出
\n换行,被输出的字符从"\n"处开始另起一 行
\f换行,但是换行后的新行的开头位置连接着上一-行的行尾
\v与\f相同;
\t转以后表示插入tab, 即横向制表符
\r光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖
\表示插入"\"本身

i='echo "aa,bb,cc, dd"`

从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%,*}
aa,bb,cc

从最后倒数到最长的匹配部分(用%%)后面的逗号的地方都被删除
echo ${i%%, *}
aa

从开头到最短的匹配部分(用#)后面的逗号的地方被删除
echo ${i#*,}
bb,cc,dd

从开头到最长的匹配部分(用##)后面的逗号的地方被删除
echo ${i##*, }
dd

每隔一个数取一个数

{1. .10. .2 }
$ (seq 1  2  10)

截取

echo {变量:截取位置(从0开始):截取个数}
123456789截取4567
i="123456789"
echo ${i:3:4}
4567

统计变量总数

echo ${#i}

二、for循环

for 为 遍历

for循环语句的语法

for 变量名 in 取值列表
do
 命令序列
 done

在这里插入图片描述
示例
计算1~100的和值
通过循环累加的方式计算1~100的和值

vim for1.sh

#!/bin/bash

a=0
for i in {1..100}
do
  a=$[$a + $i]
done
  echo $a

在这里插入图片描述
在这里插入图片描述

三、while循环

while 为 迭代

重复测试某个条件,只要条件成立则反复执行

while循环语句的语法

while 条件测试操作
do
 命令序列
 done

在这里插入图片描述

四、until循环

重复测试某个条件,只要条件不成立则反复执行

until循环语句的语法

until 条件测试操作
do
 命令序列
 done

在这里插入图片描述
用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警

#!/bin/bash

CS=3
MM=123456
SUM=0

while true
do
read -p "请输入密码:" PASS
SUM=$((SUM+1))
if [ $PASS == $MM ];then
        echo -e "密码正确!"
        exit
elif [ $SUM -lt $CS ];then
        echo -e "密码错误!"
        continue
else
        echo "警告:连续3次错误!"
        exit
fi
done

在这里插入图片描述

五、当脚本文件较长时,可以使用 set 命令指定调试一段脚本。

#!/bin/bash
set -x //开启调试模式
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分!优秀"
set +x //关闭调试模式
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格"
else
echo "$GRADE 分?不合格"
fi

作业

1.计算从1到100所有整数的和

在这里插入图片描述

2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

在这里插入图片描述

3.求从1到100所有整数的偶数和、奇数和
在这里插入图片描述

4.执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码

在这里插入图片描述

5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
在这里插入图片描述

6.用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警

在这里插入图片描述

7.编写能够自动生成一个8位随机密码的脚本

在这里插入图片描述

8.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

#!/bin/bash
i=1
sum=0
while true
do
echo "来到第$i家店门口"
read -p "请问是否需要进行购物?yes/no " gw
   while [ $gw = "yes" ]
    do

      echo "1.衣服500元"
      echo "2.裤子400元"
      echo "3.鞋子350元"
      echo "4.帽子150元"
      echo "5.袜子50元"
     echo "放弃购物"
read -p "请问您要购买哪些商品呢亲,请输入号码哦" hm
   case $hm in
    1)
    let ypy+=500
    echo "成功消费$ypy元 "
    ;;
    2)
    let ypy+=400
    echo "成功消费$ypy元 "
    ;;
#!/bin/bash
i=1
sum=0
while true
do
echo "来到第$i家店门口"
read -p "请问是否需要进行购物?yes/no " gw
   while [ $gw = "yes" ]
    do

      echo "1.衣服500元"
      echo "2.裤子400元"
      echo "3.鞋子350元"
      echo "4.帽子150元"
      echo "5.袜子50元"
     echo "放弃购物"
read -p "请问您要购买哪些商品呢亲,请输入号码哦" hm
   case $hm in
    1)
    let ypy+=500
    echo "成功消费$ypy元 "
    ;;
    2)
do
echo "来到第$i家店门口"
read -p "请问是否需要进行购物?yes/no " gw
   while [ $gw = "yes" ]
    do

      echo "1.衣服500元"
      echo "2.裤子400元"
      echo "3.鞋子350元"
      echo "4.帽子150元"
      echo "5.袜子50元"
     echo "放弃购物"
read -p "请问您要购买哪些商品呢亲,请输入号码哦" hm
   case $hm in
    1)
    let ypy+=500
    echo "成功消费$ypy元 "
    ;;
    2)
    let ypy+=400
    echo "成功消费$ypy元 "
    ;;
    3)
    let ypy+=350
    echo "成功消费$ypy元 "
    ;;
    4)
    let ypy+=150
    echo "成功消费$ypy元 "
    ;;
    5)
    let ypy+=50
    echo "成功消费$ypy元 "
    ;;
    *)
     echo " 放弃 "
       break
   esac

 read -p "请问是继续购物还是结算购物车? yes/no " zc
 done

 read -p "是否继续购物 yes/no " do

 if [ $do = "yes" ]
  then
   let i++
  else
   break
 fi
done
  echo -e "一共经过$i家店. \n合计购物总价:$ypy "
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值