在我的sh脚本中获得“一元运算符预期”

时间:2016-03-29 13:58:29

标签: shell sh unary-operator

我正在尝试使用sh为我的服务编写启动脚本,但是遇到以下行的问题

#!/bin/sh
…
if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then

我收到错误

Starting jboss-as: /etc/init.d/jboss: line 106: [: -eq: unary operator expected

我不知道eq条件有什么问题。有什么建议? - 戴夫

1 个答案:

答案 0 :(得分:1)

我可以重现错误的唯一方法是ppid变量为空。

#! /bin/sh

ppid=''


if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then
    echo running;
else
    echo not running;
fi

您可以使用

检查变量空白
if [ -z "$ppid" ]; then 
  echo "ppid is empty;"
fi

编辑:结合两者:

#! /bin/sh

ppid=


if [[ ! -z "$ppid" && $(ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null) -eq '1' ]]; then
    echo running;
else
    echo not running or pid null;
fi

最后编辑: 实际上你的问题来自于不引用变量扩展:

#! /bin/sh

ppid=


if [ $(ps --pid "$ppid" 2> /dev/null | grep -c "$ppid" 2> /dev/null) -eq '1' ]; then
    echo running;
else
    echo not running or pid null;
fi

参见#5:http://fahdshariff.blogspot.co.uk/2013/10/shell-scripting-best-practices.html#BP5