if文に整数式が必要です。

if文に整数式が必要です。

Macが24時間以上実行されている場合は、Macを終了する小さな終了スクリプトがあります。私はBashスクリプトの実際の経験はありませんが、私は次のことをしました。

!/bin/bash

#Maximum number of days to be up
max=1

#Get the uptime days and assign it to a variable
uptime_days=`uptime | cut -d " " -f 5`

if [ $uptime_days -ge $max ]
  then 
  shutdown -h now
fi

exit 0

これで、次のエラーメッセージが表示されます。

./shutdown: line 9: (: days,: integer expression expected

誰でも助けることができますか?

答え1

これはmacOSで動作します。リリースタイムスタンプを取得し、秒単位の現在のタイムスタンプを取得し、いくつかの計算結果を得ました。

#!/bin/bash
BOOT_TIME=$(sysctl -n kern.boottime | sed -e 's/.* sec = \([0-9]*\).*/\1/')
CURR_TIME=$(date +%s)
MAX_UPDAYS=1 #Days

DAYS_UP=$(( ( $CURR_TIME - $BOOT_TIME) / 86400 ))
if [ $DAYS_UP -ge ${MAX_UPDAYS} ];then
   shutdown -h now
fi

答え2

スクリプトの主なエラーはcut次のとおりです。

uptime_days=`uptime | cut -d " " -f 4`

5に変更されることに注意してください4。これは、カットがdays前の数字ではなく単語を選択するためです。

echoこれらのエラーをキャッチする方法は、コードに以下を追加することです。

echo uptime_days=$uptime_days

したがって、出力に次のものが含まれている場合

uptime_days=days,

明らかに、解析中にいくつかのエラーが発生しました。

将来の問題を回避するために改善できる他のいくつかの点があります。

シェルボーン

#!カーネルが読みやすいように、スクリプトの最初の行はで始まる必要があります。とにかく、コードはシェルによって解釈されますが、コマンドを別の方法で実行すると、一番上の行が次のように表示されないことがあります。

#!/bin/bash

良いアイデアです。

二重括弧

シェルの条件文に二重角括弧を使用すると、エラーが発生する可能性が低くなります。次のthenように同じ行に移動することもできますif

if [[ $uptime_days -ge $max ]]; then 
     echo shutdown!
fi

答え3

完全なスクリプトは次のとおりです。

#!/bin/bash
uptime | grep -q days && shutdown -h now

関連情報