在我的 sh 脚本中获取 "unary operator expected"
Getting "unary operator expected" in my sh script
我正在尝试使用 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 条件有什么问题。有什么建议吗? - 戴夫
我可以重现您的错误的唯一方法是当 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
我正在尝试使用 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 条件有什么问题。有什么建议吗? - 戴夫
我可以重现您的错误的唯一方法是当 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