条件付き文字列と数字を評価するのは本当に難しいです。数時間読んでみた後(私の初心者ガイド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
に値を表示しないため、エラーメッセージが表示されます。=
if
次のコードスニペットは//を使用してelif
PID比較ロジックを正しく実装します。これはelse
、3つの可能な出力のうちの1つだけが生成されることを保証します。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