请教一个 shell 的问题

2021-11-14 22:18:08 +08:00
 mingtdlb

前提 80 端口未监听

#!/bin/bash
#set -e
port_status=$(ss -lnt | grep -c 80)
echo ${port_status}

输出 0

#!/bin/bash
set -e
port_status=$(ss -lnt | grep -c 80)
echo ${port_status}

什么也不输出

set -e 不是有错误则退出呀?第二个有错误吗?

767 次点击
所在节点    问与答
4 条回复
lululau
2021-11-14 22:27:17 +08:00
man grep | col -b | grep -A5 'EXIT STATUS'
albertofwb
2021-11-14 23:52:15 +08:00
因为你 group 没有搜索的东西,bash 返回值非零。启用了 set -e 所以脚本在这一行就停止了,不会在执行下面的 echo
freelancher
2021-11-15 15:00:35 +08:00
set -e 是指若指令传回值不等于 0 ,则立即退出 shell 。 这里的 0 是指状态的 0 。不是返回值的 0 。明白了么?没啥必要就不要加了。
freelancher
2021-11-15 15:11:14 +08:00
此 0 非彼 0 。着重理解就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/815364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX