微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在bash shell脚本中意外的输出

对于下面的脚本,我期待输出为msg_y and msg_z 。 但是它正在打印msg_x and msg_z 。 有人可以向我解释发生了什么事吗?

#!/bin/bash set -x vr=2 echo $vr if [ $vr > 5 ] then echo "entered 1st if" echo "msg_x" echo "out of 1st if" if [ $vr < 8 ]; then echo "in of 2nd if" echo "msg_y" else echo "msg_z" fi else if [ $vr > 1 ]; then echo "msg_y" else echo "msg_z" fi fi

Git Autocompletion看起来很奇怪(只有一半function)

在bash中的string/数组操作?

如何从variables执行一个bash命令

Awk,tail,sed或其他 – 对于大文件哪个更快?

replaceshellcript中的另一个文件中的一个文件的键:值?

这个表达

[ $vr > 5 ]

被解析为输出重定向; 检查你现在是否有一个名为“5”的文件输出重定向是真实的。 请注意,在测试表达式中引用参数的通常警告在这里没有帮助(但它仍然是一个好主意)。

您可以转义>以便在测试命令中将其视为运算符:

if [ "$vr" > 5 ]; then

或者你可以使用整数比较运算符-gt

if [ "$vr" -gt 5 ]; then.

既然你正在使用bash ,你可以使用更强大的条件表达式

if [[ $vr > 5 ]]; then

要么

if [[ $vr -gt 5 ]]; then

或者使用一个算术表达式

if (( vr > 5 )); then

做你的比较(同样为其他)。

注意:尽管我展示了如何使用>作为比较运算符,即使被整数包围,也不要这样做。 大多数时候,你不会得到你想要的结果,因为参数按字典顺序进行比较,而不是数字。 试试[ 2 > 10 ] && echo What? 使用正确的整数比较运算符( -gt等)或使用算术表达式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐