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