8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
默认情况下 shell 按照出现的次序来处理 shell 脚本中的每个单独命令。对于顺序操作来说已经足够了,然后许多程序要求在 shell 脚本中的命令间有一些逻辑流控制。有一类命令会基于变量值或者其它变量的结果等条件使脚本跳过或循环执行命令。这样的命令常常称为结构化命令。
结构化命令允许你改变程序执行的顺序,在某些条件下执行一些命令而在其它条件下跳过另一些命令。
使用 if-then 语句1
2
3
4if command
then
command
fi
bash shell 的 if 语句会运行 if 行定义的那个命令。如果该命令的退出状态码是0,位于 then 部分的命令就会被执行,如果是其他值,那么 then 部分的命令就不会被执行,bash shell 会继续执行脚本的下一个命令。在其它编程语言中,if 语句之后的对象是一个等式来测试是 TRUE 还是 FALSE 值。这个地方需要特别注意区别。
if-then-else 语句1
2
3
4
5
6if command
then
commands
else
commands
fi
在 if-then 语句中,不管命令是否成功执行,你都只有一种选择,而 else 语句能让命令执行不成功时有另外一种选择。
嵌套 if1
2
3
4
5
6
7if command1
then
commands
elif command2
then
more commands
fi
有时如果需要检查代码中的多种条件,则可以用 else 的替代版本,即 elif。elif 会通过另一个 if-then 语句来延续 else 部分。可以将多个 elif 语句串起来,形成一个大的 if-then-elif 嵌套组合。
test 命令
上述 if 语句中命令都是普通 shell 命令。可能会有这样的疑问:if-then 语句是否能测试跟命令的退出状态码无关的条件。答案是不能的。test 命令提供了在 if-then 语句中测试不同条件的途径。如果 test 命令中列出的条件成立,test 命令就会退出状态码并返回退出状态码 0,这样 if-then 语句就与其它编程语言中的 if-then 语句以类似的方式工作了。如果条件不成立,test 命令就会退出并返回状态码 1,这样 if-then 语句就会失效。
test 命令的格式非常简单:1test condition
condition 是 test 命令要测试的一系列参数和值。
用在 if-then 语句中时,test 命令看起来是这样的:1
2
3
4if test condition
then
commands
fi
bash shell 提供了另一种在 if-then 语句中申明 test 命令的方法:1
2
3
4if [ condition ]
then
commands
fi
方括号定义了 test 命令中用到的条件。注意,你必须在左括号右侧和右括号左侧各加一个空格,否则会报错。
test 命令可以判断 3 类条件:数值比较
字符串比较
文件比较
复合条件测试
if-then 语句允许使用布尔罗纪夫来组合测试。有两种布尔运算符可用:[ condition1 ] && [ condition2 ];
[ condition1 ] || [ condition2 ]。
第一个布尔运算使用 AND 布尔运算符来组合两个条件,第二个布尔运算使用 OR 布尔运算符来组合两个条件。
if-then 高级特性
bash shell 有两项较新的扩展,提供了可在 if-then 语句中使用的高级特性:用于数学表达式的双尖括号;
用于高级字符串处理功能的双方括号。
双尖括号
双尖括号命令允许你将高级数学表达式放入比较中。test 命令只允许在比较中进行简单的算术操作。双尖括号命令提供了更多的为用过其它编程语言的程序员所熟悉的数学符号。双尖括号的格式如下:1(( expression ))
双方括号
双方括号命令提供了针对字符串比较的高级特性,使用 test 命令中采用的标准字符串比较方法,同时也提供了另一个特性:模式匹配。双方括号的格式如下:1[[ expression ]]
case 命令
case 命令会将指定的变量同不同模式进行比较。如果变量和模式是匹配的,那么 shell 会执行该模式指定的变量。可以通过竖线操作符来分隔模式,在一行列出多个模式。星号会捕获所有跟所列出的模式都不匹配的值。