文章目录
前言
前面几节写了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
用简单的语言记录自己走过的技术路