shell脚本之循环语句

1、for循环

1.1执行机制:遍历

执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环 结束 如果省略 [in
WORDS … ] ,此时使用位置参数变量 in “$@”

1.2基本格式

第一种

for 已知循环次数

for  tlj(变量)   循环次数(取值列表)

do
需要循环的事件

done

第二种

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

for ((expr1;expr2;expr3))
do
       command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

在这里插入图片描述

1.3脚本例子

打印一列问号

#!/bin/bash
for i  in {
    
    1..9}
do
echo -e " ? "
done

在这里插入图片描述

打印一个正方形

#!/bin/bash
for j in {
    
    1..9}
do
for i  in {
    
    1..9}
do
echo -e " * \c"
#\c换行
done
echo
#换行
done

在这里插入图片描述

九九乘法表

#!/bin/bash
for j in {
    
    1..9}
    do
       for i in `seq $j`
    do
	 echo -e "${i}x${j}=$[i*j] \t\c"
	 #\t tab键可以对齐
    done
	echo
done

在这里插入图片描述

求1到10的和方法一

#/bin/bash
sum=0
for i in {
    
    1..10}
do
  sum=$[sum+i]
  let i++
done
echo "$sum"

在这里插入图片描述

累加到10方法二

#!/bin/bash
sum=0
for i in {
    
    1..100}
do
let sum=$i+$sum
#sum=$[i+sum]
#两种方法都可以
done
echo "$sum"

在这里插入图片描述

批量添加用户

[root@localhost opt]# vim add.sh
#!/bin/bash
ulist=$(cat /opt/user.txt)
for uname in $ulist
do
   useradd $uname
   echo "123123" |passwd --stdin  $uname &>/dev/null
done

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

2、while循环:判断为假时停止

相对于for,需要知道循环次数 我们只知道停止条件,不知道次数,就需要使用while 直到达到条件

2.1基本格式

重复测试某个条件,只要条件成立则反复执行,当命令判断为假时停止

格式:
while  [ 条件测试操作 ]
do						#do代表循环的开始
	判断式/命令序列
done 					#done代表循环的结束

2.2自制小游戏

猜价格小游戏

#!/bin/bash
p=`echo $[RANDOM%1000+1]`
time=0
 
while true
do
let time++
read -p "请输入您猜测的价格(1-1000):" h
if [ $h -eq $p ]
then
echo "恭喜您猜中了,您一共猜测了$time次"
exit
elif [ $h -gt $p ]
then
echo "您猜测的价格过高"
else
echo "您猜测的价格过低"
fi
done

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

累加到10方法三

#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[i+sum]
let i++
done
echo $sum

在这里插入图片描述

3、until循环:判断为真时停止

3.1基本格式

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

格式:
until  [ 条件测试操作 ]
do
	判断式/命令序列
done

3.2脚本例子

累加到10方法四

#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
do
 sum=$[sum+i]
 let i++
done
echo "{1..100}的和:$sum"

在这里插入图片描述

4、嵌套循环

在循环内部再使用一个循环称为嵌套循环
格式:

#!/bin/bash
for ((i=1;i<5;i++))
do
        echo 此${
    
    i}为外部循环
        for((j=1;j<4;j++))
        do
                echo -e "\t此${j}为内部循环"
        done
done

在这里插入图片描述

5、循环语句中的break、exit和continue的使用

5.1break的使用

当满足条件的情况下break会跳出当前循环体

#!/bin/bash
for ((i=1;i<5;i++))
do      
        echo 此${
    
    i}为外部循环
        for((j=1;j<4;j++))
        do
            if [ $j -eq 3 ]			<------如果j的值为3
            then
                break				<------跳出当前循环(内部)
            fi  
        echo -e "\t此${j}为内部循环"
        done
done

在这里插入图片描述

5.2exit的使用

当满足条件的情况下exit会直接退出当前脚本

#!/bin/bash
for ((i=1;i<5;i++))
do
        echo 此${
    
    i}为外部循环
        for((j=1;j<4;j++))
        do
            if [ $j -eq 3 ]					<------如果j的值为3
            then
                exit						<------结束当前脚本
            fi
        echo -e "\t此${j}为内部循环"
        done
done
 

在这里插入图片描述

5.3continue的使用

continue中止某次循环中的命令,但不会完全中止整个命令

#!/bin/bash
for ((i=1;i<5;i++))
do
        echo 此${
    
    i}为外部循环
        for((j=1;j<4;j++))
        do
            if [ $j -eq 2 ]					
            then
                continue					
            fi
        echo -e "\t此${j}为内部循环"
        done
done

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_62231324/article/details/132390702