-1

我正在尝试在 Debian 机器上运行 BASH 脚本。如果我之前复制到隐藏文件的mac地址与机器的实际MAC地址匹配,或者如果文件存在而不是机器应该启动,则该脚本应该在每次启动时运行(所以我将.sh文件放入)。如果其中任何一个条件不成立,则机器应关闭。/etc/init.d.mac.txt.mac.txt

这是我的脚本:

#!/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文件,它不会。我是否犯了一些逻辑或语法错误?

4

1 回答 1

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 

解释:

  • 在读取文件之前测试文件是否存在
  • " [" 和 " ]" 字符前后必须有空格
  • 运行子命令时,使用$( ... )语法而不是反引号
于 2012-07-13T20:20:55.383 回答