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に値を表示しないため、エラーメッセージが表示されます。=

if次のコードスニペットは//を使用してelifPID比較ロジックを正しく実装します。これはelse、3つの可能な出力のうちの1つだけが生成されることを保証します。echoPOSIX比較構文を使用します(参照: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

関連情報