OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

逻辑

正如我们在第 27 章中发现的, (()) 复合命令支持多种比较运算符。 还有一些可用于评估逻辑。 以下是完整列表:


表 34-6:比较运算符


操作员说明

操作员说明

<= 小于或等于


图片

>= 大于或等于


图片

<小于


图片

>大于


图片


图片

== 等于


图片

!= 不等于


图片

&& 逻辑与


图片

|| 逻辑或


图片

表达式1?表达式2:表达式3 比较(三元)运算符。 如果表达式 表达式1

评估为非零(算术为真)然后 表达式2, 别的 表达式3.


图片


用于逻辑运算时,表达式遵循算术逻辑规则; 也就是说,计算为零的表达式被认为是假的,而非零的表达式被认为是真。 这 (()) 复合命令将结果映射到 shell 的正常退出代码中:



[我@linuxbox ~]$ 如果((1)); 然后回显“真”; 否则回声“假”; 菲

true

[我@linuxbox ~]$ 如果((0)); 然后回显“真”; 否则回声“假”; 菲

false

[我@linuxbox ~]$ 如果((1)); 然后回显“真”; 否则回声“假”; 菲

true

[我@linuxbox ~]$ 如果((0)); 然后回显“真”; 否则回声“假”; 菲

false


最奇怪的逻辑运算符是 三元运算符. 该运算符(模仿 C 编程语言中的运算符)执行独立的逻辑测试。 它可以用作一种 if/then/else 语句。 它作用于三个算术表达式(字符串不起作用),如果第一个表达式为真(或非零),则执行第二个表达式。 否则,执行第三个表达式。 我们可以在命令行上试试这个:



[我@linuxbox ~]$ A = 0 [我@linuxbox ~]$ ((a<1?++a:--a)) [我@linuxbox ~]$ 回声$a

1

[我@linuxbox ~]$ ((a<1?++a:--a))

[我@linuxbox ~]$ 回声$a

0

[我@linuxbox ~]$ A = 0 [我@linuxbox ~]$ ((a<1?++a:--a)) [我@linuxbox ~]$ 回声$a

1

[我@linuxbox ~]$ ((a<1?++a:--a))

[我@linuxbox ~]$ 回声$a

0


在这里,我们看到了一个三元运算符的作用。 这个例子实现了一个切换。 每次执行操作时,变量的值 a 从零切换到一,反之亦然。

请注意,在表达式中执行赋值并不简单。


尝试时, 打坏 会声明一个错误:


[我@linuxbox ~]$ A = 0

[我@linuxbox ~]$ ((a<1?a+=1:a-=1))

bash: ((: a<1?a+=1:a-=1: 试图赋值给非变量(错误标记是“-=1”)

[我@linuxbox ~]$ A = 0

[我@linuxbox ~]$ ((a<1?a+=1:a-=1))

bash: ((: a<1?a+=1:a-=1: 试图赋值给非变量(错误标记是“-=1”)


这个问题可以通过用括号包围赋值表达式来缓解:



[我@linuxbox ~]$ ((a<1?(a+=1):(a-=1)))

[我@linuxbox ~]$ ((a<1?(a+=1):(a-=1)))


接下来,我们将看到一个更完整的示例,该示例在生成简单数字表的脚本中使用算术运算符:



#!/斌/庆典

# arith-loop: 演示算术运算符的脚本完成=0

A = 0

printf "a\ta**2\ta**3\n" printf "=\t====\t====\n"


直到((完成)); 做 b=$((a**2))

c=$((a**3))

printf "%d\t%d\t%d\n" $a $b $c ((a<10?++a:(finished=1)))

完成

#!/斌/庆典

# arith-loop: 演示算术运算符的脚本完成=0

A = 0

printf "a\ta**2\ta**3\n" printf "=\t====\t====\n"


直到((完成)); 做 b=$((a**2))

c=$((a**3))

printf "%d\t%d\t%d\n" $a $b $c ((a<10?++a:(finished=1)))

完成


在这个脚本中,我们实现了一个基于值的直到循环 多变的。 最初,变量设置为零(算术假),我们继续循环直到它变为非零。 在循环中,我们计算计数器变量的平方和立方

一种。 在循环结束时,计算计数器变量的值。 如果它小于 10(最大迭代次数),则加 XNUMX,否则变量finished 的值为XNUMX,使finished 在算术上为真,从而终止循环。 运行脚本给出了这个结果:


[我@linuxbox ~]$ 算术循环

[我@linuxbox ~]$ 算术循环


a

= 0

1

2

3

4

5

6

7

8

9

10

a

= 0

1

2

3

4

5

6

7

8

9

10


图片

一个**2 一个**3

========

一个**2 一个**3

========

0

1

4

9

16

25

36

49

64

81

100

0

1

4

9

16

25

36

49

64

81

100

0

1

8

27

64

125

216

343

512

729

1000

0

1

8

27

64

125

216

343

512

729

1000

OnWorks 的顶级操作系统云计算: