你必须非常努力,才能看起来毫不费力!

微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero !

前言

上一篇文章,我们一起学习了 ​​Shell​​​ 脚本中的 ​​if​​ 条件控制,以及多种条件判断,本篇文章我们一起来学习下剩余的流程控制语句。

流程控制语句

我们先来看下 ​​Shell​​ 中常见的流程控制:

  • if...else:和所有语言的if...else...类型一样
  • case...esac:与其他语言中的 switch ... case 语句类似
  • for:与其他语言中的 for 循环一样
  • while:和其他语言的 while 循环一样
  • until循环:与 while 的循环处理方式相反
  • break:跳出循环
  • continue:跳出本次循环和 ​
​if...fi​​ 类似,​​Shell​​ 中的分支选择以 ​​case​​ 开始,以 ​​esac​​ 结束,结束标志都为开始语句的单词的倒序输入。
case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
...

*)
都不成立,执行
;;
esac


复制代码
[root@VM-0-5-centos ~]# vim case.sh
#!/bin/bash
read -t 30 -p "please input your age: " age
case $age in
18)
echo "18"
;;
20)
echo "20"
;;
*)
echo "others"
;;
esac


[root@VM-0-5-centos ~]# chmod 755 case.sh
[root@VM-0-5-centos ~]# ./case.sh
please input your age: 20
20
[root@VM-0-5-centos ~]# ./case.sh
please input your age: 15
others
[root@VM-0-5-centos ~]# ./case.sh
please input your age: 18
18
复制代码

for循环

语法一

​for​​ 循环遍历整个列表进行循环,列表内可以是数字、字符串等。

for 变量 in 值1 值2 值3...
do
程序
done
复制代码
#  累加示例

[root@VM-0-5-centos ~]# vim for_test.sh

#!/bin/bash

sum=0
for i in 1 2 3 4 5 6
do
sum=$(( $sum+$i ))
done
echo $sum


[root@VM-0-5-centos ~]# chmod 755 for_test.sh
[root@VM-0-5-centos ~]# ./for_test.sh
21
复制代码
# 批量解压数据示例
[root@VM-0-5-centos ~]# vim example.sh

#!/bin/bash

ls *.tar.gz >> ls.log
for i in $(cat ls.log)
do
echo $i
tar -zxvf $i &>/dev/null
done

rm -rf ls.log


[root@VM-0-5-centos ~]# chmod 755 example.sh
[root@VM-0-5-centos ~]# ./example.sh
case.tar.gz
fot_test.tar.gz
[root@VM-0-5-centos ~]# ls
case.sh case.tar.gz example.sh for_test.sh fot_test.tar.gz

复制代码

语法二

使用变量控制的方式,来进行 ​​for​​ 循环

for ((初始值;循环控制;变量变化))
do
程序
done
复制代码
# 测试累加1到100

[root@VM-0-5-centos ~]# vim for_test_2.sh

#!/bin/bash

sum=0

for((i=0;i<=100;i++))
do
sum=$(($sum+i))
done
echo $sum


[root@VM-0-5-centos ~]# chmod 755 for_test_2.sh
[root@VM-0-5-centos ~]# ./for_test_2.sh
5050
复制代码

while循环

​while​​ 循环,是在条件成立时进入循环

while [ 条件判断式 ]
do
程序
done
复制代码
#  测试1加到100

[root@VM-0-5-centos ~]# vim while_test.sh

#!/bin/bash

sum=0
i=0

while [ $i -le 100 ]
do
sum=$(($sum+$i))
i=$(($i+1))
done

echo $sum

[root@VM-0-5-centos ~]# chmod 755 while_test.sh
[root@VM-0-5-centos ~]# ./while_test.sh
5050
复制代码

until循环

​until​​ 在条件不成立时进入循环,条件成立则终止循环

until [ 条件判断式 ]
do
程序
done
复制代码
# 测试1加到100

[root@VM-0-5-centos ~]# vim until_test.sh

#!/bin/bash

i=0
sum=0

until [ $i -gt 100 ]
do
sum=$(($sum+$i))
i=$(($i+1))
done
echo $sum

[root@VM-0-5-centos ~]# chmod 755 until_test.sh
[root@VM-0-5-centos ~]# ./until_test.sh
5050
复制代码

break

和其他语言类似,​​break​​ 用于跳出循环

# 当循环到10之后,跳出循环
[root@VM-0-5-centos ~]# vim break_test.sh

#!/bin/bash

for ((i=0;i<100;i++))
do
echo $i
if [ $i -eq 10 ]
then
break
fi
done

[root@VM-0-5-centos ~]# chmod 755 break_test.sh
[root@VM-0-5-centos ~]# ./break_test.sh
0
1
2
3
4
5
6
7
8
9
10

复制代码

continue

和其他语言类似,​​continue​​ 用于跳出当前循环

# 跳出循环,不打印3

[root@VM-0-5-centos ~]# vim continue_test.sh

#!/bin/bash

for ((i=0;i<5;i++))
do
if [ $i -eq 3 ]
then
continue
fi
echo $i
done

[root@VM-0-5-centos ~]# chmod 755 continue_test.sh
[root@VM-0-5-centos ~]# ./continue_test.sh
0
1
2
4


  • 总结

本篇文章我们学习了 ​​Shell​​ 脚本中的剩余流程控制语句,包括以下几种:

  • if
  • case...esac
  • for
  • while
  • until
  • break
  • continue

学到这里,加上我们之前学习的 if 流程控制,条件判断、Bash中的变量类型、再加上更早之前的各种 Linux 命令,我们就可以编写简单的脚本去完成一些功能了。当然如果需要完成复杂功能的脚本,还需要我们去学习更多的 Linux 命令,在日积月累中完成蜕变。你必须非常努力,才能看起来毫不费力,一起 from zero to zero !!!

更多

个人博客: lifelmy.github.io/

微信公众号:漫漫Coding路