bashプロンプトで直接ifステートメントを使用しますか?

bashプロンプトで直接ifステートメントを使用しますか?

これが直接達成できるかどうかはわかりません。しかし、以下を使用してCPUの現在の温度を取得しようとしています。

cpu=$(</sys/class/thermal/thermal_zone0/temp)

温度が70000以上のときにシャットダウンを実行するには、echoを使用して同じコマンドの出力をifステートメントにパイプしたいと思います。 (温度を摂氏単位で取得するには、コマンド出力を1000で割る必要があります。)

それはまるで

cpu=$(</sys/class/thermal/thermal_zone0/temp) | if $cpu -gt 70000 then shutdown fi

Piが過熱するのを防ぐためにこれをやろうとしています。 PiのCPU温度を15分ごとに確認し、70を超えると終了するようにcronjobを予約します。

ありがとうございます。

ベストアンサー1

最後のコマンドはほぼ正確ですが、文法的には正しくありません。修正バージョン:

cpu=$(</sys/class/thermal/thermal_zone0/temp); if [ "$cpu" -gt 70000 ]; then shutdown; fi

またはより短く、

cpu=$(</sys/class/thermal/thermal_zone0/temp); [ "$cpu" -gt 70000 ] && shutdown

またはより短く、

[ "$(</sys/class/thermal/thermal_zone0/temp)" -gt 70000 ] && shutdown

コマンドの問題(-statement構文に加えてif)はパイプを使用することです。パイプの右側(if文)は、パイプの左側(変数割り当て)から読み取る必要があります。変数の割り当ては出力を生成せず、ifステートメントは入力を消費しません。また、$cpuパイプラインの2つの部分が同時に実行されるため、パイプラインの右側の値がわかりません。

クローン操作の場合、次の方が良いステートメントかもしれません。

[ "$(</sys/class/thermal/thermal_zone0/temp)" -le 70000 ] || shutdown

これにより、温度が低くてもコマンドは正常に終了します。この変更により、[ ... -gt 70000 ] && shutdownコールドテストでゼロ以外のシャットダウンが返され、操作が失敗したように見えます。[ ... ]cron

また、bashジョブを実行するには、crontabをシェルとして使用する必要があります。そうしないと、$(<...)構文が正しく機能しない可能性があります。 crontabの上部で変更$(<...)または$(cat ...)設定できます。SHELL=/bin/bashまた、を実行するにはshutdownroot権限が必要な場合があります。

おすすめ記事