Linux学习[5]---shell脚本之bash脚本---判断&选择&循环

时间:2022-09-13 01:23:22

前言

前面几节写了bash的一些基本概念,但是在程序中涉及到的选择判断之类的还没有写,所以涉及到的函数都是非常简单的输出样例。高级一点的函数都会有很多选择判断以及循环,因此这一小节进行记录。


1. 判断

判断语句通常用在选择语句和循环语句的条件中,但在linux中除了这个功能,还有其他作用。
linux中判断使用的命令是test,下面是详细用法。

1.1 值判断

判断两个变量A,B中,A是否大于B。
test A -gt B; echo $?
这里gt=greater than,后面紧跟着的echo是为了打印成立与否,类似于bool类型返回值:true or false

除了例子中的大于,那么类似的就会有小于,等于,大于等于,小于等于,不等于。下面列个表方便对比,需要判断的时候只需要把上面例子中的-gt换成你想要判断的条件-xx

逻辑符号 指令
-gt
-lt
= -eq
-ge
-le
!= -ne

1.2 文本判断

bash中的变量之类的大多以文本进行保存,下面是文本的判断。
以判断abc和asd是否相等,不等,字典序中是否大于,小于列表。

判断符 示例
test abc > asd; echo $?
test abc < asd; echo $?
= test abc = asd; echo $?
!= test abc != asd; echo $?

对文件状态进行逻辑判断

状态 判断符 示例
存在 -e test -e a.out; echo $?
存在且为普通文件 -f test -f a.txt; echo $?
存在且为目录文件 -d test -d mydir; echo $?
存在且是软链接 -L test -L a.out; echo $?
可读 -r test -r a.txt; echo $?
可写 -w test -w a.txt; echo $?
可执行 -x test -x a.sh; echo $?

2. 选择

在C语言中选择语句一般就几种:

  • if
  • if else
  • switch+case

在bash中也一样,只不过写起来语法上稍有些不同,下面举几个例子,应该就能看明白啥意思了。

2.1 if

单 if 的用法为:if[逻辑判断]+then+fi。下面脚本使用了最简单的if结构。关键字if后面跟着[],里面是一个逻辑表达式。这个逻辑表达式就是if结构的条件。如果条件成立,那么if将执行then到fi之间包含的语句,我们称之为隶属于if的代码块。如果条件不成立,那么隶属于if的代码块不执行。

#!/bin/bash
if [$name = "Edwinwzy"]
then
	echo "I'm chengchei"
	echo "Edwinwzy is me"
fi

2.2 if else

if判断失败,那么执行else。else放在fi之前,then之后

#!/bin/bash
if [$name = "Edwinwzy"]
then
	echo "I'm chengchei"
	echo "Edwinwzy is me"
else
	echo "I'm not chegnchei"
fi

除了简单的变量比较指令,我们也可以写文本判断指令,把它放在if的条件判断里面,例如下面代码是判断文件是否存在。

#!/bin/bash
filename=$name
if [ -e $filename]
then
	echo "Exist"
else
	echo "Empty"
fi

if与else还可以进行各种if嵌套,下面举个简单例子:

#!/bin/bash
if [$name = "Edwinwzy"]
then
	echo "I'm chengchei"
	echo "Edwinwzy is me"
else
	if [$name = "chengchei"]
	then
		echo "I'm chegnchei"
	else
		echo "I'm not chegnchei"
	fi
fi

2.2 case

在C语言中switch接着case,但在bash使用类似于switch的功能,写法上稍有些不同。
下面是一个例子,其中*是通配符,表示任何文本都可以触发的情况。

#!/bin/bash
name="Edwinwzy"
case $name in
chengchei)
	echo "1"
;;
Edwinwzy)
	echo "2"
;;
*)
	echo "3"
;;
esac

3. 循环

C语言中的循环有while;do while;for等,bash中也类似,下面是具体介绍。

3.1 while

下面这个程序就是判断变量A是否大于变量B,如果成立则变量A自减1,最后A等于B。

#!/bin/bash
varA=10
varB=8
while [ $varA -gt $varB ]
do
	varA=$(($varA-1))
	echo "varA minus one"
	echo "now the varA is $varA"
done

echo "now A is equal to B"

3.2 do while

下面的程序为求和1~10,不包括5

#!/bin/bash
cuount=0
varA=1
while :
do
	if [ $varA -gt 10 ]
	then
		#下面的if嵌套没有意义,单纯为了用一下continue
		if [ $var -eq 5 ]
		then
			continue
		fi
		break
	fi
	count=$(($count+$varA))
	varA=$(($varA+ 1))
done
echo $count

4.一些注意点

本小节的判断,选择,循环的语句,使用[]时,在逻辑语句中与[]两头要有空格,例如:if[$varA -eq 5]这里$和5的左边和右边分别都有中括号,这里如果不加空格,就会报错。正确的写法是:if[ $varA -eq 5 ]


澄澈i
用简单的语言记录自己走过的技术路