SHELL中的循环语句

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

循环结构

连续出现的功能性代码

shell循环有四种:

  • while 条件成立,循环就开始 直到循环条件不满足或者跳出结构为止

  • until 和while循环恰恰相反 条件不成立 循环开始 ;条件成立 循环结束

  • for

  • select

while 和 for 较为常用

while

主要用于程序的后台运行,需要持续运行的守护进程
while是一个循环语句,在某个条件为真的情况下重复执行特定的代码块。在shell中,while语句通常用于重复执行一系列命令,直到某个条件不再成立。

while [ 条件表达式 ]
	do
		代码
done
-------------------------------------
if [ 条件表达式 ]
	then
		代码
fi

SHELL中的循环语句_第1张图片

案例演示:
#!/bin/bash
num=1
while [ "$num" -lt 10 ]
    do
       uptime >> /baizhi/uptime2.log # 打印系统的负载
        sleep 3 #休眠三秒继续执行
        ((num=num+1))
done
###
	指令 & ## 将进程放到后台运行
例如:
	bash load1.sh &
###
	fg jobId   #将指定进程拉回到前台
例如:
	fg 1
jobs -l ## 查看后台正在运行的进程
例如:
	[1]+ 2165 运行中 bash load1.sh &
## 计算 1+2+3+4+...+99+100
#! /bin/bash
sum=0
num=1
while [ $num -le 100 ]
	do
		((sum=sum+num))
		((num++))
done
# echo 是打印技术内容以后自动换行
echo "1~100的和为: $sum"
printf "1~100的和为:$sum \n"  # printf  默认不换行  \n---换行符
printf指令
printf 在脚本中应用的比 echo 更广泛 ----- 可移植性强
语法:
	printf 格式 展示的数据
printf使用文本或者空格分隔参数,也可以使用格式化字符串 还可以指定字符串的宽度,左右对其的方式
默认不换行 想换行 可以手动添加特殊字符 \n --- 换行符
##参数
	%s 格式替换符 输出一个字符串
	%c 格式替换符 输出一个字符
	%d 格式替换符 整型输出
	%f 格式替换符 输出小数
%-10s 指一个宽度为10的字符 (- 表示左对齐 没有则表示右对齐) 任何字符都会被显示在10个字符的宽度内
如果内容不够10个字符,使用空格填充 若内容超过10个字符 超过也会将内容显示出来(格式会乱)
%-4.1f 指格式化小数 其中 %-4 代表左对齐 显示在4个字符的宽度内 .1 是指小数点后保留一位
until

不满足条件,执行 ; 满足条件跳出循环结构
until是一个流程控制结构,它在执行一系列命令之前重复执行一个命令,直到该命令的退出状态为真(0)为止。

[root@centos-128 abc]# cat until.sh
#! /bin/bash
num=1
until [ $num -gt 10 ]
    do
        echo "HelloWorld"
        ((num++))
done

SHELL中的循环语句_第2张图片

for
写法 1:
for 变量 in 变量取值的列表
	do
		代码
done
执行流程:
	变量代表分别获取每个值 值取完了 结构退出
写法2:
	for ((expr1;expr2;expr3))
	for ((变量初始化定义;设置变量的取值范围;变量递增递减))
类似于C语言
	for(int i=0;i<=10;i++)
案例:
# 打印1-10
方法一:
#! /bin/bash
for var in 1 2 3 4 5 6 7 8 9 10
	do
		echo $var
done
方法二:
for var in {1..10}
	do
		echo $var
done
方法三:
for var in `seq 10`
	do
	echo $var
done

## 计算 1+2+3+4+...+99+100

sum=0
for var in {1..100}
	do
		((sum=var+sum))
done
echo "1~100的和为 $sum"
# 打印1-10
for ((num=1;num<=10;num++))
	do
		echo $num
done

## 列出某个目录下的文件
#! /bin/bash
for file in `ls /baizhi`
	do
	echo $file
done
## 列出某个文件夹下所有的文件(包含子文件夹内部的文件)
[root@centos-128 abc]# cat for1.sh
#!/bin/bash
function file_list(){
for file in `ls $1`
    do
        if [ -f "$file" ]
            then
                echo "$1/$file"
        else
            file_list "$1/$file"
        fi
done
}
file_list $1
循环控制
中断循环:
办法1:
	循环条件不满足
办法2:
	break 中断循环
	continue 直接中断本次循环,进入下一次
	exit 退出脚本,退出当前shell
	return 用在函数中 结束函数的作用
break

break 关键字 break n [n代表跳出的循环层数]

[root@centos-128 abc]# cat break.sh
#!/bin/bash
for i in {1..10}
    do
        if [ $i -le 6 ]
            then
                echo "HelloWorld   $i"
        else
            break
        fi
done

#! /bin/bash
for var in {1..10} # 外层循环
	do
		echo "外层循环的执行"
		for tmp in {1..10}
			do
				if [ $tmp -le 6 ]
					then
						printf "$tmp "
				else
					break 2 ## 跳出第二层循环
				fi
		done
		printf "\n"
done

执行结果:
[root@baizhi baizhi]# bash break2.sh
外层循环的执行
1 2 3 4 5 6
continue

contine 跳过本次循环,直接进入下一次循环

[root@centos-128 abc]# cat continue.sh
#! /bin/bash
for i in {1..10}
    do
        if [ $i -eq 6 ]
            then
                continue
        else
            echo "HelloWorld  $i"
        fi
done

你可能感兴趣的:(Linux,linux,运维)