加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么这个Bash脚本不出错?

发布时间:2020-12-15 19:11:42 所属栏目:安全 来源:网络整理
导读:这是我的Bash脚本: #!/bin/bash -eif [ == "" ]; then echo "BAD" exit 1fiecho "OK" 这里的输出: ./test.sh: line 3: [: ==: unary operator expectedOK 返回码为0。 在第3行有一个明显的语法错误。而不是引发语法错误,拒绝运行脚本,不知何故,脚本只是
这是我的Bash脚本:
#!/bin/bash -e

if [ == "" ]; then
  echo "BAD"
  exit 1
fi

echo "OK"

这里的输出:

./test.sh: line 3: [: ==: unary operator expected
OK

返回码为0。

在第3行有一个明显的语法错误。而不是引发语法错误,拒绝运行脚本,不知何故,脚本只是运行并在运行时报告语法错误。 -e标志没有保护我,显然if语句中的语法错误构成了一个错误的条件,而不是立即退出程序的原因。但是,不管怎样,Bash已经解析了整个if … fi block,所以在忽略了错误的行之后,执行以某种方式恢复不是在下一个语法正确的行,而是在块结束之后?

我有两个问题:

>发生了什么事?
>今后如何保护自己免受这种行为?

>如果运行命令 [,并且只是检查它的返回码。 Bash不知道也不关心[command]的语法。

你可以在其中放一些其他的命令,Bash仍然不知道它的特定语法。
>有两件事情想到:

>使用[[而不是[:Bash确实知道并关心它的语法。
>使用ShellCheck1;在线,手动或在您最喜欢的编辑器。

如果和-e处理退出代码:如果它不是零,如果不会让你进入那个块,而-e将退出。你一次也不能真正拥有这两种行为。 (好吧,似乎[出现与错误结果(1)和语法错误(2)不同的代码,所以可能“检测”语法错误。)

还有一些其他的工具,但这是我唯一知道的一个。建议欢迎。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读