Shell编程基础——流程控制

1. 多分支 if 条件语句

if [ 条件判断式1 ]
then
  当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
  当条件判断式2成立时,执行程序2 „
…省略更多条件 …
else
  当所有条件都不成立时,最后执行此程序
fi

#此处省略编辑vim过程
[cfp@bogon ~]$ vim ./text/a.txt  
 #查看完整脚本内的完整代码
[cfp@bogon ~]$ cat ./text/a.txt   
#!/bin/bash
#Author: Liang jie
read -p "Please input a number:" number

if [ $number -eq 10 ] #如果number=10
then
	echo 'number=10'
	exit 1
elif [ $number -le 22 -a $number -ge 10 ]  #如果10<=number<=22
then
	echo '10<=number<=22'
	exit 2
elif [ $number -ge 33 ]   #如果number>33
then
	echo 'number>=33'
	exit 3
else
	echo NO
	exit 4
fi

[cfp@bogon ~]$ ./text/a.txt
Please input a number:10
number=10
[cfp@bogon ~]$ echo $?
1
[cfp@bogon ~]$ ./text/a.txt
Please input a number:17
10<=number<=22
[cfp@bogon ~]$ echo $?
2
[cfp@bogon ~]$ ./text/a.txt
Please input a number:44
number>=33
[cfp@bogon ~]$ echo $?
3
[cfp@bogon ~]$ ./text/a.txt
Please input a number:3
NO
[cfp@bogon ~]$ echo $?
4

2.多分支 case条件语句

  case语句和if…elif…else语句一样都是多分支条件语句,不过和 if 多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。

case $变量名 in
   “值1”)
     如果变量的值等于值1,则执行程序1
      ;;
   “值2”)
     如果变量的值等于值2,则执行程序2
      ;;
…省略其他分支…
   *)
     如果变量的值都不是以上的值,则执行此程序
      ;;
esac

 # 编辑一个脚本,编辑过程略
[cfp@bogon ~]$ vim ./text/b.txt   
 # 查看这个脚本的源代码
[cfp@bogon ~]$ cat  ./text/b.txt   
#!/bin/bash
#Author :Liang jie
read -p "Please choose yes/no: " -t 30 cho
case $cho in
	"yes")
		echo 'Your choose is yes!'
		;;
	"no")
		echo 'Your choose is no!'
		;;
	*)
		echo 'Your input is error!'
		;;
esac

[cfp@bogon ~]$ chmod 755 ./text/b.txt
[cfp@bogon ~]$ ./text/b.txt
Please choose yes/no: yes
Your choose is yes!
[cfp@bogon ~]$ ./text/b.txt
Please choose yes/no: no
Your choose is no!

3. for循环

语法一:
for 变量 in 值1 值2 值3…
 do
   程序
 done

in后面有几个值,for循环就执行几次。每次循环,将各个值分别赋给变量。然后执行程序。

实例1

 # 创建一个 for.txt 文件
[cfp@bogon text]$ touch for.txt
 # 编辑 for.txt 文件,编辑过程略
[cfp@bogon text]$ vim for.txt
 # for.txt 文件 源代码如下:
[cfp@bogon text]$ cat for.txt
#!/bin/bash
#Auther:Liang jie
for i in morning noon afternoon night
	do
		echo "This time is $i"
	done

[cfp@bogon text]$ bash for.txt
This time is morning
This time is noon
This time is afternoon
This time is night

实例2:

  # 先创建一个for目录
[cfp@bogon ~]$ mkdir /tmp/for   
[cfp@bogon ~]$ cd /tmp/for   
 # 在for目录下面加上几个文件
[cfp@bogon for]$ touch a.sh
[cfp@bogon for]$ touch b.sh
[cfp@bogon for]$ touch c.sh
[cfp@bogon for]$ touch d.sh
[cfp@bogon for]$ touch e.dr
[cfp@bogon for]$ touch a.txt
[cfp@bogon for]$ ls
a.sh  a.txt  b.sh  c.sh  d.sh  e.dr
 # 首先编辑一个脚本。编辑过程略
[cfp@bogon ~]$ vim ./text/d.txt   
 # 脚本的完整代码如下
[cfp@bogon ~]$ cat ./text/d.txt   
#!/bin/bash
#查看/tmp/for目录中有几个文件的文件名是以.sh结尾的
#Auther : liang jie
cd /tmp/for    
ls *.sh > ls.log
y=1
for i in $(cat ls.log)
do
	echo $y
	y=$(($y+1))
done
 #运行 ./text/d.txt脚本
[cfp@bogon ~]$ bash ./text/d.txt
1
2
3
4
#/tmp/for 目录下一共有四个 .sh 文件,与事实相符

语法二:
for (( 初始值;循环控制条件;变量变化 ))
  do
    程序
  done

双小括号才可以进行加减乘除运算
实例1:

[cfp@bogon text]$ vim for.txt
  # 编辑 for.txt过程略,下面是查看for.txt源码
[cfp@bogon text]$ cat for.txt
#!/bin/bash
#从1加到100
#Auther:Liang jie
s=0
for ((i=1;i<=100;i=i+1))
	do
		 s=$(($s+$i))
	done
echo "The sum of 1+2+...+100 is : $s"

[cfp@bogon text]$ bash for.txt
The sum of 1+2+...+100 is : 5050

4.while循环和until循环

  while循环是不定循环,也称作条件循环 。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了。

while [ 条件判断式 ]
  do
    程序
  done

[cfp@bogon text]$ vim for.txt
[cfp@bogon text]$ cat for.txt
#!/bin/bash
#从1加到100
#Auther:Liang jie
i=1
s=0
while [ $i -le 100 ]
	do
		 s=$(($s+$i))
		 i=$(($i+1))
	done
echo "The sum of 1+2+...+100 is : $s"

[cfp@bogon text]$ bash for.txt
The sum of 1+2+...+100 is : 5050

until循环
  until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。

until [ 条件判断式 ]
  do
    程序
  done

[cfp@bogon text]$ vim for.txt
[cfp@bogon text]$ cat for.txt
#!/bin/bash
#从1加到100
#Auther:Liang jie
i=1
s=0
until [ $i -gt 100 ]
	do
		 s=$(($s+$i))
		 i=$(($i+1))
	done
echo "The sum of 1+2+...+100 is : $s"

[cfp@bogon text]$ bash for.txt
The sum of 1+2+...+100 is : 5050

5. 总结

  文章总结了几种常见的流程控制语句。如果你有编程语言基础的话,这些应该是很简单的。如果没有编程基础,也不会太难,就是几种常见的格式,熟悉了就可以。

发布了36 篇原创文章 · 获赞 65 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43275558/article/details/104702839