2015-09-21 29 views
0

在我的/etc/rc.local文件中我有这样的代码:交流文件内容

_IP=$(hostname -I) || true 
if [ "$_IP" ]; then 
    printf "My IP address is %s\n" "$_IP" 
fi 

value='cat /var/www/key.txt' 
if ["$value" = "0"] then 
    sed -i 's/0/1/g' /var/www/key.txt 
fi 
if ["$value"= "1"] then 
    sed -i 's/1/0/g' /var/www/key.txt 
fi 
mpg321 /var/www/sounds/startup.mp3 > /dev/null 2>/dev/null & 
exit 0 

的方面的问题是从“价值”到最后的“网络连接”的部分。

我想要发生的是/var/www/key.txt的文件内容在'1'和'0'之间的每次启动时交替。这似乎并没有发生。

音频确实起到,因此该文件正在运行。我认为我的IF语句有什么问题?

任何想法?

+0

请看看:http://www.shellcheck.net/ – Cyrus

+0

使用http://shellcheck.net - 有你的脚本几个语法错误。在bash中,要将文件读入变量,可以使用'contents = $(

+0

我从来不知道撇号和空格可能会打破这么多。感谢您的指导,它现在可以很好地工作! –

回答

1

有在脚本中一些错误的事情。以下是你的剧本,但我修复

_IP=$(hostname -I) || true 
if [ "$_IP" ]; then 
    printf "My IP address is %s\n" "$_IP" 
fi 

value=`cat /var/www/key.txt` 
if [ "$value" = "0" ]; then 
    sed -i 's/0/1/g' /var/www/key.txt 
fi 
if [ "$value" = "1" ]; then 
    sed -i 's/1/0/g' /var/www/key.txt 
fi 
mpg321 /var/www/sounds/startup.mp3 > /dev/null 2>/dev/null & 
exit 0 
0

尝试改变

value='cat /var/www/key.txt' 

value=`cat /var/www/key.txt` 

引号(')作为第一个版本刚引用字符串,变量value设置为文本字符串cat /var/www/key.txt这显然不是你想。如果你希望这个字符串作为一个命令被执行,并且它的输出被代替,你需要使用反引号(`)。

+1

使用'$(...)',而不是反引号。 – chepner