1. 有一类命令会基于变量值或其他命令的结果等条件使脚本跳过或循环执行命令,这样的命令通常称为结构化命令。
2. 结构化命令中linux命令,最基本的类型就是if-then语句。if-then语句格式如下:
if command
then
commands
fi
bash shell的if语句会运行if行定义的那个命令。如果该命令的退出状态码是0.位于then部分的命令就会被执行。如果该命令的退出状态码是其他值,那then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。
if-then语句的另一个格式:
if command; then
commands
fi
在要执行的命令结尾加个分号,就可以在同一行使用then语句了。
3. if-then-else语句格式:
if command
then
commands
else
commands
fi
当if语句的命令返回退出状态码0时,then部分中的命令会被执行。当if语句中的命令返回非零退出状态码时,bash shell会执行else部分中命令。
4. elif语句格式:
if command1
then
commands
elif command2
then
more commands
fi
elif语句行提供了另一个要测试的命令,类似于原始的if语句。如果elif后命令的退出状态码是0,则bash会执行第二个then语句部分的命令。
5. test命令提供了在if-then语句中测试不同条件的途径。
test命令的格式:
test condition
condition是test命令要测试的一系列参数和值。当用在if-then语句中时,test命令格式是这样的:
if test condition
then
commands
fi
bash shell还提供了另一种在if-then语句中声明test命令的方法:
if [ condition ]
then
commands
fi
方括号定义了test命令中用到的条件。注意,你必须在左括号右侧和右括号左侧各加一个空格,否则会报错。
test命令可以判断3类条件:
(1) 数值比较;
(2) 字符串比较;
(3) 文件比较。
6. 使用test命令最常见的情形是对两个数值进行比较。
test命令的数值比较功能:
7.%20%20test命令无法处理变量中存储的浮点值。bash%20shell能处理的数仅有整数。
8.%20%20test命令的字符串比较功能:
9.%20%20使用test命令的大于小于功能经常会有两个问题困扰我们:
(1)%20%20大于小于符号必须转义,否则shell会把它们当做重定向符号而把字符串值当做文件名;
(2)%20%20大于小于顺序和sort命令所采用的不同。
10.test命令的文件比较功能:
11.if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用:
(1) [ condition1 ] && [ condition2 ];
(2) [ condition1 ] || [ condition2 ]。
第一个布尔运算使用AND布尔运算符来组合两个条件。要让then部分的命令执行,两个条件都必须满足。
第3章vbscript 语句和过程·41·表 3.1 vbscript 语句中的分支语句 if……then……else 语句 select case 语句 二值分支语句 多值分支语句3.1.1.1使用 if……then……else 语句vbscript 中最常用的条件语句就是 if…then…else 语句,一般 if…then…else 语句用 来检查一个布尔条件,然后根据结果为 true 或者 false 执行相应的脚本,如果为 truelinux命令,则 执行 then 后面的脚本,如果为 false,则执行 else 后面的脚本。自增自减运算符的运算对象只能是变量,不能是常量或表达式,n++和n--都相当于n=n+1,但是n++的运算顺序是先将n的值作为表达式n++的值,再执行n=n+1,++n的运算顺序是先执行n=n+1,在将n的值作为表达式++n的值。"(这就是为什么会出现“同一张票数会被打印多次”的问题),之后线程2再对tickets进行减减运算,此时tickets就变成0,但此时cpu又切换到线程1,由于刚才已经判断过了if()条件,而且线程1已经完成了“打印”的任务,所以线程1剩余的任务就是将tickets的值进行减减运算,运算后,tickets的值就变成了-1,之后线程1再次去判断tickets的条件看是否能满足下次运行的条件,经判断不满足,此时线程1就结束了。
12.双尖括号命令的格式:>
术语expression可以是任意的数学赋值或比较表达式。
双尖括号命令符号:
13.双方括号命令的格式:[[ expression ]]
双方括号里的expression使用了test命令中采用的标准字符串进行比较。但它提供了test命令未提供的另一个特性——模式匹配。
在模式匹配中,可以定义一个正则表达式来匹配字符串值。