快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)
循环结构
连续出现的功能性代码
shell循环有四种:
while 条件成立,循环就开始 直到循环条件不满足或者跳出结构为止
until 和while循环恰恰相反 条件不成立 循环开始 ;条件成立 循环结束
for
select
while 和 for 较为常用
while
主要用于程序的后台运行,需要持续运行的守护进程
while是一个循环语句,在某个条件为真的情况下重复执行特定的代码块。在shell中,while语句通常用于重复执行一系列命令,直到某个条件不再成立。
while [ 条件表达式 ]
do
代码
done
-------------------------------------
if [ 条件表达式 ]
then
代码
fi
案例演示:
#!/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
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