Skip to content

Latest commit

 

History

History
114 lines (98 loc) · 3.33 KB

流程控制.md

File metadata and controls

114 lines (98 loc) · 3.33 KB

流程控制

流程控制结构分为三种,分别用来完成顺序,分支,循环的功能,从而提高工作效率。

条款

  1. 各种结构的条件,使用方括号[ ]包裹,并且紧挨着两侧括号各有一个空格。

顺序语句

最普通的情况就是顺序执行了,一行一行的。没什么可说的。

但是有两点可以注意一下:分号(;)和反斜杠()

分号

与C语言不同,Bash不要求每句话都以分号结尾。但是有时候如果两个或多个语句写在了同一行,就需要用分号来分隔,以避免解释器将之视为一条语句。

反斜杠

这里的反斜杠,我不是指的输出的时候进行转义作用的反斜杠。而是在编程的时候如果一行写不下,可以在不引起起义的情况下,加上一个反斜杠。这样上下两行就合成了一条语句。

test语句

整数

整数之间的测试就是两个整数间的关系运算。 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语句

常见选择结构。

if [ $a -eq $b];then
  echo "a,b相等"
else
  echo "a,b不相等"
fi

另外bash中的else if写作elif

MATLAB中else if写作elseif

=,==

可以用=和==来比较字符串是否相同。此时符号两边可以有空格,也可以无空格。
但是不能一边有空格,另一边没有空格。

case语句

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的形式。

while语句

计算1到100的和

sum=0
i=1
while [ $i -le 100 ]
do
    let sum+=$i
    let i++
done
echo "其和是 $sum"