我真的很难评估条件字符串和数字。经过几个小时的阅读和尝试(我的初学者指南)我不断收到错误消息,例如,syntax error in conditional expression
等等 。unary operator expected
conditional binary operator expected
if 条件中有问题 - 但我不明白。我尝试使用算术运算符-ge
,-le
但这也不起作用。请不要担心此代码片段的有争议的逻辑。
在我的 Raspberry 上使用 Raspbian (Debian)。
#!/bin/sh
NAME=syslogd
PID=/var/run/$NAME.pid
PIDofP=`pidof $NAME`
if [[ $PIDofP = "" ]] #empty, at least not visible
then
echo " No process is running."
fi
if [[ $PIDofP < 1000 ]]
then
echo " The PID-number is lower than 1000. ($PID: $PIDofP)"
fi
if [[ "$PIDofP" > 999 ]]
then
echo " The PID-number is higher than 1000. ($PID: $PIDofP)"
fi
exit 0
有没有办法评估字符串、数字、整数或其他任何东西以了解其类型?假设我只有一堆数字和/或字母,想知道它们的“格式”——以便之后使用,希望不必花费数小时寻找正确的语法。
抱歉,第一次写bash.script
答案1
该unary operator expected
错误可能是由于$PIDofP
条件中未加引号所致。在这种情况下,当$PIDofP
是空字符串时,shell 在 的左侧根本看不到任何值,=
而不是空白值,因此会出现错误消息。
以下代码片段通过使用if
//elif
正确实现了 PID 比较逻辑,这保证了仅生成else
三个可能的输出之一。echo
它使用 POSIX 比较语法(请参阅bash 中双方括号和单方括号有什么区别?)。
#!/bin/sh
NAME=syslogd
PID=/var/run/$NAME.pid
PIDofP=`pidof $NAME`
if [ "$PIDofP" = "" ]; then
echo " No process is running."
elif [ "$PIDofP" -lt 1000 ]; then
echo " The PID number is lower than 1000. ($PID: $PIDofP)"
else
# $PIDofP is >= 1000.
echo " The PID number is 1000 or higher. ($PID: $PIDofP)"
fi
exit 0