特定の条件で再起動する Bash スクリプト

特定の条件で再起動する Bash スクリプト

2つの異なるbashスクリプトを呼び出して条件が一致した場合、システムを再起動するbashスクリプトを作成しました。条件は次のとおりです。REBOOT_REQUIRED> 0

#!/bin/bash

# Declare a variable used as counter in order to count the reboot requests.
declare -i REBOOT_REQUIRED=0

# Script List
RESTORE_ETHERNET_NAME='restore-eth-names.sh'
RESTORE_WIFI_DRIVER='restore-wifi-driver.sh'

#####################################
# Execute RestoreEthNames.sh script #
#####################################

echo -e "Performing Startup Checks"

chmod +x $RESTORE_ETHERNET_NAME
./$RESTORE_ETHERNET_NAME
# Store return code
RESTORE_ETHERNET_NAME_RET_CODE=$?

if [[ $RESTORE_ETHERNET_NAME_RET_CODE == 0 ]]
then
    echo -e "==> Ethernet Configuration: Ok"
else
    echo -e "==> Ethernet Configuration: Fixed"
    ((REBOOT_REQUIRED++))
fi

#######################################
# Execute RestoreWiFiDriver.sh script #
#######################################

chmod +x $RESTORE_WIFI_DRIVER
./$RESTORE_WIFI_DRIVER
# Store return code
RESTORE_WIFI_DRIVER_RET_CODE=$?

if [[ $RESTORE_WIFI_DRIVER_RET_CODE == 0 ]]
then
    echo -e "==> WiFi Driver: Ok"
else
    echo -e "==> WiFi Driver: Fixed"
    ((REBOOT_REQUIRED++))
fi

if [[ $REBOOT_REQUIRED > 0 ]]
then
    echo -e "System Reboot in 5 seconds"
    sleep 5
    reboot
fi

このスクリプトは、システムサービスを追加するために別のインストールスクリプトを使用して起動時に実行されます。

################################################
# Create Service to execute scripts on startup #
################################################

if [ -e $SERVICE_FULL_PATH ]; then
   echo "File $SERVICE_FULL_PATH already exists!"
else
   echo -e "[Unit]\nDescription=Startup Script\n\n[Service]\nExecStart=$\/$SCRIPT_STARTUP_CHECKS\n\n[Install]\nWantedBy=default.target" >> $SERVICE_FULL_PATH
   chmod 664 $SERVICE_FULL_PATH
   
   # Enable the service
   systemctl enable $SERVICE_NAME
fi

サービスが正しく作成され、サービスが有効になっています。

問題は、PCが再起動ループに入るということです。ログインするとPCが起動し、5秒後にシステムが再起動します。

ベストアンサー1

1つの問題は、文字列比較演算子(>)を使用していることです。この演算子は、左側の文字列が次のようになっていることを確認します。アルファベット順右の文字列より大きい。

代わりに算術比較演算子を使用する必要があります-gt-eq使用する必要がある戻りコードのチェックにも同様です(問題は少なく、数字自体が同じであれば、2つの数字を表す文字列も同じです)。

たとえば、参照してください。ここまたはここより多くの情報を知りたいです。

その意味は、1桁の数字(2を超えてはいけません)を「1桁の文字列」とREBOOT_REQUIRED比較する簡単な場合は、0比較が期待どおりに機能する必要があるため、呼び出すスレーブスクリプトに問題がある可能性があります。

おすすめ記事