- 各种结构的条件,使用方括号
[ ]
包裹,并且紧挨着两侧括号各有一个空格。
最普通的情况就是顺序执行了,一行一行的。没什么可说的。
但是有两点可以注意一下:分号(;)和反斜杠()
与C语言不同,Bash不要求每句话都以分号结尾。但是有时候如果两个或多个语句写在了同一行,就需要用分号来分隔,以避免解释器将之视为一条语句。
这里的反斜杠,我不是指的输出的时候进行转义作用的反斜杠。而是在编程的时候如果一行写不下,可以在不引起起义的情况下,加上一个反斜杠。这样上下两行就合成了一条语句。
整数之间的测试就是两个整数间的关系运算。
bash与其他语言不同,关系运算没有使用大于号*>,小于号<*,等于号==。
主要是因为大于小于号具有重定向的意义,故不能再用来比较大小。
可以用=
来比较是否相等,但是等号前后一定要有空格,否则就视作一个字符串了。
共有六种:
选项 | 描述 | 英文全称 |
---|---|---|
-eq | 等于 | equal |
-gt | 大于 | greater than |
-lt | 小于 | less than |
-ne | 不等于 | not equal |
-ge | 大于等于 | greater or equal |
-le | 小于等于 | less or equal |
用法 | 描述 |
---|---|
test str1 = str2 | 测试是否相等 |
test str1 != str2 | 测试是否不等 |
test str1 \< str2 | 字典序str1是否在str2之后 |
test str1 \> str2 | 字典序str1是否在str2之前 |
test str1 | 如果不为空返回1 |
test -n str1 | 如果不为空返回1 |
test -z str1 | 如果是空串,返回1 |
选项 | 描述 |
---|---|
d | 是否为目录 |
f | 是否为普通文件 |
x | 是否有执行权限 |
r | 是否有读权限 |
w | 是否写读权限 |
e | 是否存在 |
s | 大小是否为0 |
c | 是否为字符设备文件 |
b | 是否为块设备文件 |
L | 是否为符号链接 |
- -a 逻辑与
- -o 逻辑或
- ! 逻辑非
Bash中,独具特色的是,分支语句的块作用域,大量使用了
反语
。这里的反语,不是指的反义词,而是指的单词字面上的反转。
常见选择结构。
if [ $a -eq $b];then
echo "a,b相等"
else
echo "a,b不相等"
fi
另外bash中的else if写作elif
MATLAB中else if写作
elseif
可以用=和==来比较字符串是否相同。此时符号两边可以有空格,也可以无空格。
但是不能一边有空格,另一边没有空格。
bash中没有switch...case语句,取而代之的是case...in语句。
read -p "Input g:" g
echo -n "g=$g: "
case $((g/10)) in #分数除以10
10|9) echo "A";; #10或9
8) echo "B";;
7) echo "C";;
6) echo "D";;
*) echo "E"
esac
上面代码完成的功能就是根据学生分数输出其等级。
bash中也是for循环和while循环,其块作用域(即
循环体
)采用do...done的形式。
计算1到100的和
sum=0
i=1
while [ $i -le 100 ]
do
let sum+=$i
let i++
done
echo "其和是 $sum"