gpt4 book ai didi

linux - 变量的 IF 运算

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:28 26 4
gpt4 key购买 nike

我正在用 bash 构建一个用于 Linux (SLES 11SP3) 的脚本。我想通过使用以下语法查找它的 pid 来检查某个进程是否存在:

pid="$(ps -ef | grep -v grep | grep /sbin/syslog-ng | awk '{print $2}')"

这会用 syslog-ng 进程的 pid 填充变量 pid。然后我想在 if 语句中使用这个变量:

if [ ${pid} > 0 ]; then
do something
else
do something else
fi

问题是这个 if 语句似乎总是假的,即使变量 pid 的值大于 0。所以,else 部分总是被执行而不是正确的(如果条件为真)语句。

我在使用 wc -l 检查文件系统是否存在时遇到了类似的问题:

exist_tmp=$(df -x fuse.gvfs-fuse-daemon -h | grep /tmp | wc -l)
if [ ${exist_tmp} > 0 ]; then
do something
fi

这是行不通的,即使变量的值为 1,表示存在/tmp 文件系统。当我将语法更改为:

if [ ${exist_tmp} != 0 ]; then
do something
fi

在这个用例中,大于 0 和不等于 0 之间的区别让我有些困惑。

问题是:

  1. 有人知道为什么 pid 查找和 if 语句不会执行我想要它执行的操作吗?
  2. 有没有人知道 > 0 和 != 0 可能有什么问题?

非常感谢任何输入!

最佳答案

在 bash 中,<、>、!= 之类的比较用于按字典顺序比较字符串。要比较它们的整数值,您可以 > 像这样:

if [ "$a" -gt "$b" ]

和这样的不平等:

if [ "$a" -ne "$b" ]

参见 this reference有关更多详细信息或其他比较器。

关于linux - 变量的 IF 运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com