shell编程—循环语句forwhileuntil

Posted 可乐卷儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程—循环语句forwhileuntil相关的知识,希望对你有一定的参考价值。

一、for循环语句-单循环

命令序列是不变的,通过取不同变量名,用来执行同一组命令,中间可以加入if语句

1、格式一

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

2、 格式二

for 变量名
do
done

当for语句内没有取值列表时,可以在执行命令时加上取值列表内容
实例1:
在这里插入图片描述
在这里插入图片描述
实例2:
在这里插入图片描述
在这里插入图片描述

3、格式三

for ((i=1;i>3;i++))  #i每循环一次+1,一直到小于3
do
done

实例1
在这里插入图片描述
在这里插入图片描述
实例2
在这里插入图片描述
在这里插入图片描述

4、取值列表常见的格式

这里拿实际的例子来说明
创建脚本文件4.sh

  • 使用大括号 { }
    在这里插入图片描述
  • 直接写参数,空格隔开参数
    在这里插入图片描述
    在这里插入图片描述
    实例
    在这里插入图片描述
    在这里插入图片描述
  • 使用seq命令,seq
    打印5个hello
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    seq命令给变量值
    在这里插入图片描述

5、实例

  • 打印出100内的偶数
    双中括号是做运算的
    在这里插入图片描述
    双括号是取括号内的值,不加双括号只会取值&i%2
    在这里插入图片描述
    验证
    在这里插入图片描述

  • 打印出100内的偶数的和
    三种方式

    • 第一种
      在这里插入图片描述
    • 第二种
      在这里插入图片描述
    • 第三种
      在这里插入图片描述
      在这里插入图片描述
  • 1-100求和
    在这里插入图片描述
    在这里插入图片描述

  • 多个用户判断,如果系统存在用户,输出已存在,若不存在,就创建
    vim u.sh

#!/bin/bash
for i in `cat user.txt`
do
id $i &> /dev/null
if [ $? -eq 0 ];then
echo "用户已存在" 
else
     useradd $i
     echo "123" | passwd --stdin $i &> /dev/null
     echo "已创建用户$i,并设置密码"
fi
done

验证

  • 创建ip段,验证是否可以ping通
    在这里插入图片描述
    创建ip段,验证是否可以ping通
#!/bin/bash
a=192.168.35
for ip in {2..50}
do
ping -c 3 $a.$ip &> /dev/null
if [ $? -eq 0 ];then
        echo "$a.$ip is up"
else
        echo "$a.$ip is down"
fi
done

验证
在这里插入图片描述

二、for循环语句-双循环

1、实例

  • ” 打出矩阵、三角形、菱形、五角星
    打出5
    5的星星矩阵
    在这里插入图片描述

在这里插入图片描述
升级!,可以自定义矩阵规格
在这里插入图片描述
在这里插入图片描述
升级!!,自定义三角形*
在这里插入图片描述
在这里插入图片描述
升级!!!,输出等腰三角形

#!/bin/bash
for ((i=1;i<=5;i++))
do
        for((j=5;j>=$i;j--))
        do
        echo -n " "
        done
        for((z=1;z<=$i;z++))
        do
        echo -n "* "
        done
echo
done

升级!!!!,输出菱形

read -p "请输入星星的规格: " p
for ((i=1;i<=$p;i++))
do
        for((j=5;j>=$i;j--))
        do
        echo -n " "
        done
        for((z=1;z<=$i;z++))
        do
        echo -n "* "
        done
echo
done
for((i=1;i<=$p;i++))
do
        for((j=1;j<=$i;j++))
        do
        echo -n " "
        done
        for((z=5;z>=$i;z--))
        do
        echo -n "* "
        done
echo
done

验证
在这里插入图片描述
终极大佬!!!!!!五角星

#!/bin/bash
#先做五角星上面的角
for ((i=1;i<=6;i++))
do
        for ((j=18;j>i;j--))
        do
        echo -e " \\c"
        done
        for ((k=1;k<=i;k++))
        do
        sleep 0.2s
        echo -e -n "\\e[5;32m* \\e[0m"
        done
echo ''
done
#做6层长度
for ((i=1;i<=6;i++))
do
        for ((k=1;k<=i;k++))
        do
        echo -n " "
        done
        for ((j=18;j>i;j--))
        do
        sleep 0.2s
        echo -e -n "\\e[5;33m* \\e[0m"
        done
echo ''
done
#做最后的
for ((i=1;i<=6;i++))
do
        for ((k=6;k>i;k--))
        do
        echo -e " \\c"
        done
        for ((j=7;j>i;j--))
        do
        sleep 0.2s
        echo -e -n "\\e[5;34m* \\e[0m"
        done
        for ((j=3;j<i*5;j++))
        do
        echo -e " \\c"
        done
        #第二个角
        for ((j=1;j<i;j++))
        do
        echo -e " \\c"
        done
        for ((k=6;k>=i;k--))
        do
        sleep 0.2s
        echo -e -n "\\e[5;35m* \\e[0m"
        done
echo ''
done

验证
在这里插入图片描述

  • 用for语句打出99乘法表
#!/bin/bash
num=0
for ((i=1;i<=9;i++))
do
        for((j=1;j<=$i;j++))
        do
        num=$(($i*$j))
        echo -n -e "$j*$i=$num\\t"
        done
echo
done

验证
在这里插入图片描述

  • 打印出三个数1,2,3的所有三位数的组合
#!/bin/bash
for ((i=1;i<=3;i++))
do
        for ((j=1;j<=$i;j++))
        do
        for ((z=1;z<=$j;z++))
        do
        echo -n  "$i$j$z "
        done
        done
echo
done

验证
在这里插入图片描述

三、while语句

1、格式

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

  • 格式一:条件成立时,do和done之间反复循环,直到条件不成立就done
while [条件测试操作]
do
命令序列
done

实例
当1=1时,打印hello;此时会一直打印hello
在这里插入图片描述
在这里插入图片描述

  • 格式二: 执行命令返回码为0时,执行do
while 命令
do
命令序列
done

在这里插入图片描述
以上两种格式又称之为死循环,还有两种死循环的表达方式

  • while true
  • while :
    若想中止死循环,需要在命令序列内加入“let i++”

2、实例

  • 打印出12345,上山打老虎
i=1
while [ $i -le 5 ]
do
echo $i
let i++
done
echo “上山打老虎”

在这里插入图片描述

  • 计算1-100的偶数和
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
        if [[ $i%2 -eq 0 ]];then
        sum=$[$i+$sum]
        fi
let i++
done

echo $sum

验证
在这里插入图片描述

3、break、continue、exit的区别

  • break:退出当前循环
  • continue:当前条件成立,执行下一层条件
  • exit:直接退出脚本
    实例
    猜数字游戏,没有猜中一直猜,猜中即停止
#!/bin/bash
n=30
while true
do
read -p "请输入一个数字:" num
if [ $num -eq $n ];then
echo "你猜对了"
break
elif [ $num -gt $n ];then
echo "你猜小了"
elif [ $num -lt $n ];then
echo "你猜大了"
fi
done
~     

在这里插入图片描述
这里拿一个打印1-5的例子具体讲解下三者的区别

只打印其中的1-5

#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
break
fi
let i++
done

一直打印5

#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
continue
fi
let i++
done

exit:可以指定输出内容

#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
exit 22
fi
let i++
done

在这里插入图片描述

四、until语句

1、格式

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

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

实例
若1大于1,则输出11;结果是不停输出11

#!/bin/bash
until [ 1 -gt 1 ]
do
echo 11
done

以上成为死循环表达式,还有一张表达方式:
until false

2、实例

计算1-50的和

#!/bin/bash
i=1
sum=0
until [ $i -gt 50 ]
do
let sum=$i+$sum
let i++
done
echo $sum

验证
在这里插入图片描述

以上是关于shell编程—循环语句forwhileuntil的主要内容,如果未能解决你的问题,请参考以下文章

shell之forwhileuntil循环双重循环

shell之forwhileuntil循环

Shell脚本--循环(forwhileuntil)

shell脚本编程-循环(forwhileuntil)

shell 四之forwhileuntil 循环语句

forwhileuntil循环