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

文章介绍了Bash脚本中的判断语句,包括值判断和文本判断,如使用test命令进行比较操作。接着讲解了选择语句,包括if、if-else和case结构。此外,还讨论了循环语句,如while和dowhile循环。文章强调了在使用这些语句时要注意空格的使用,以避免语法错误。
摘要由CSDN通过智能技术生成

前言

前面几节写了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 $?

对文件状态进行逻辑判断

状态判断符示例
存在-etest -e a.out; echo $?
存在且为普通文件-ftest -f a.txt; echo $?
存在且为目录文件-dtest -d mydir; echo $?
存在且是软链接-Ltest -L a.out; echo $?
可读-rtest -r a.txt; echo $?
可写-wtest -w a.txt; echo $?
可执行-xtest -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
用简单的语言记录自己走过的技术路

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

澄澈i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值