Raspbian:评估条件字符串和/或数字

Raspbian:评估条件字符串和/或数字

我真的很难评估条件字符串和数字。经过几个小时的阅读和尝试(我的初学者指南)我不断收到错误消息,例如,syntax error in conditional expression等等 。unary operator expectedconditional 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

相关内容