2017-01-17 20 views
1

私はRaspbian JessieとRaspberry Piを使用して、オーディオビジュアルアートインスタレーションに取り組んでいます。オーディオまたはビデオは、bashスクリプトによるログイン後に開始されます。このスクリプトは単独でうまく動作します。整数が変数として解釈されています

私の問題は、ifステートメントを使用して、特定の時間帯にのみループが実行されるようにスケジュールを設定しようとしていたことが原因です。これはループの先頭に置かれ、新しいファイルが開始されるまでの時間を確認します。

HOUR=$(date +"%H") 
echo "The hour is $HOUR" 
if [ $HOUR -gt 22 || $HOUR-lt 8 ] 
then 
     sleep 60 
     continue 
fi 

私は、スクリプトの先頭にdeclare -i HOURと整数としてHOUR宣言しました。

スクリプトはこのエラーを出力し、次に続行します。

./start_audio.sh: line 49: 13: command not found 

私は$HOUR [13]は、エラーに示されているので、変数が正しく設定されていると信じています。なぜ、$hourは、整数として宣言されたときにコマンドとして解釈されるのですか?

引用符を追加したり空白を削除したりするなどの変更がありました。他の質問への回答が示唆しています。

+0

スクリプト全体を投稿できますか? – Mox

+1

[Shellcheck](http://www.shellcheck.net)は、このような多くの問題を自動的に検出します。 –

答えて

3

(ほとんどは推奨されません-o)二重引用符であなたの変数を囲みます(ここでは必須ではありませんが、一般的なベストプラクティスなど)との間で||で二つにチェックを分離:

if [ "$HOUR" -gt 22 ] || [ "$HOUR" -lt 8 ] 

それとも、あなたは[[ ]]を使用することができます。

if [[ "$HOUR" -gt 22 || "$HOUR" -lt 8 ]] 
+1

'-o'は基本的に非推奨です。 2つのコマンド '[...] || [...] '代わりに。 – chepner

3

シェル[test)組み込みまたは外部の一つは、その構文内で短絡評価演算子をサポートしていません。私たちはそれでありながら、あなたが防ぐために、変数の展開を引用しなければならない

[ $HOUR -gt 22 ] || [ $HOUR -lt 8 ] 

[[ $HOUR -gt 22 || $HOUR -lt 8 ]] 

または二つの部分のロジックを破る:あなたがbashキーワード、[[を使用する必要が

単語分割とパス名展開:

[ "$HOUR" -gt 22 ] || [ "$HOUR" -lt 8 ] 

私は、$HOUR -lt 8のように、$HOUR-lt 8がタイプミスであると想定しています。

+0

引用符で傷つけることはありませんが、何も追加しないと思っています。HOUR変数にスペース(引用符が必要)を入れると、-gtと-lt演算子は醜い結果で失敗します。 dateコマンドで数字のみを返すことができない場合は、比較を試みる前にチェックする必要があります。 – Fred

+0

@Fred 'HOUR = 'foo -o 3'を考えてみましょう。 '$ HOUR'を引用しないと' $ HOUR'が整数ではないにもかかわらず成功しますが、8より小さいか22より大きい値になることは決してありません。 – chepner

+0

True。私はいつもこの問題に晒されていない二重括弧[[]]を使います。そして、一重括弧テストコマンドで実行される単語分割を忘れてしまいました。 – Fred

1

[ ]の標準試験で||演算子を使用することはできません。

||-oに変更するか、または二重括弧[[ ]]条件(bash固有)を使用してください。

+0

'-o'はずっと前から廃止されています。 – heemayl

+0

私は実際にこのことを熟知していませんが、-oは "test"コマンドのPOSIX仕様の一部であるようです... bashがその内部組み込みバージョンのオペレータを非難した場合、私は驚くでしょう(http:// pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html) – Fred

+0

'-o'はPOSIX仕様の拡張であり、廃止予定です。新しいコードでは使用しないでください。 – chepner

関連する問題