2012-07-13 53 views
-1

我試圖在Debian機器上運行BASH腳本。如果先前複製到隱藏的.mac.txt文件的mac地址與機器的實際MAC地址匹配,或者存在.mac.txt文件,則該腳本應在每次啓動時運行(因此我將.sh文件放入/etc/init.d)。如果其中一個條件不成立,機器應該關機。Bash檢查啓動時是否存在文件

這裏是我的腳本:

#!/bin/bash 
output="'cat /root/.mac.txt'"; 
mac="'/sbin/ifconfig | grep 'eth0' | tr -s ' ' | cut -d ' ' -f5'" 
if ["$mac" = "$output" ] || [ -f /root/.mac.txt] 
then 
echo "Server will start" 
else 
shutdown -h now 
fi 

如果MAC地址不正確,機器關閉,但如果我刪除.mac.txt文件沒有。我在做一些邏輯或語法錯誤?

+1

除了FatalError關於'['和']' - '的空格問題,我不理解您的邏輯。如果它們相同,則該文件必須存在。那麼爲什麼要檢查它們是否相等呢?爲什麼不檢查文件是否存在? 2.你似乎對'''和'\'混淆了。例如,語句'output =''cay /root/.mac.txt'「'會將變量'$ output'設置爲字符串''cay/root/.mac.txt'',而不是運行任何類型的命令。 3.你的意思是'貓'而不是'cay'嗎? – ruakh 2012-07-13 18:56:05

+0

腳本不會在啓動時自動運行,因爲它在'/ etc/init.d'中。 – chepner 2012-07-13 19:14:25

+1

我想我想要做的是:首先我想檢查.mac.txt文件是否存在。如果它不存在關機。如果存在,則應檢查MAC地址是否匹配。如果他們沒有關閉機器..如果他們匹配比繼續啓動 – Aaron 2012-07-13 19:36:00

回答

2

稍加修改的版本:

#!/bin/bash 
macfile='/root/.mac.txt' 
mac=$(/sbin/ifconfig | grep 'eth0' | tr -s ' ' | cut -d ' ' -f5) 

# Shut down if file does not exist 
if [ ! -f $macfile ]; then 
    shutdown -h now 
fi 

# Verify MAC address against cached value 
output=$(cat $macfile) 
if [ "$mac" = "$output" ]; then 
    echo "Server will start" 
else 
    shutdown -h now 
fi 

說明:從它讀

  • 測試的文件存在之前
  • 的 「[」 和 「]」 字符必須在它們之前和之後有空格
  • 當運行子通信並且使用$(...)語法代替反引號
+0

完美謝謝你這麼多生病現在試試 – Aaron 2012-07-13 20:32:21

+0

我不知道爲什麼,但腳本仍然無法正常工作,我給了它可執行的權限,但它不會在啓動時工作..如果機器雖然它的工作。 – Aaron 2012-07-13 20:44:22

+0

@ Aaron-「不工作」是什麼意思?它具體做了什麼,你期望它做什麼?如果您手動而不是自動運行它,它會工作嗎?你確定它一直在運行嗎? – bta 2012-07-13 21:52:38