如果语句不执行参数

时间:2019-04-06 15:00:38

标签: bash shell if-statement debian raspbian

GNU nano 2.7.4     File: /home/pi/initDisplay/initDisplay.sh               
#!/usr/bin/env bash

#HDMI connection?

rm -f hdmi.name
tvservice -n 2>hdmi.name
HDMI_NAME=`cat hdmi.name`                                                    
echo $HDMI_NAME
if [ "$HDMI_NAME" == "[E] No device present" ]; then
    LCD_ON=`cat /boot/config.txt | grep "#CONFIGURAZIONEHDMI"`
    echo $LCD_ON
    if [ "$LCD_ON" == "#CONFIGURAZIONEHDMI" ]; then
        echo "reboot con la configurazione LCD"
        sudo rm -f /boot/config.txt
        sudo cp /boot/config_lcd.txt /boot/config.txt
        sleep 2
        sudo  reboot -n
    fi                                 
else
    HDMI_ON=`cat /boot/config.txt | grep "#CONFIGURAZIONELCD"`
    echo $HDMI_ON
    if [ $HDMI_ON == "#CONFIGURAZIONELCD" ]; then
        echo "reboot con la configurazione HDMI"
        sudo rm -f /boot/config.txt
        sudo cp /boot/config_hdmi.txt /boot/config.txt
        sleep 2
        sudo reboot -n
    fi
fi

不使用if开始$LCD_ON语句的arg。当我尝试执行它时,它不会返回我期望的结果。现在返回:

[E] no device detected
#CONFIGURAZIONEHDMI

但它不会开始替换文件并重新启动。

P.S .:用户和文件拥有执行此权限的权限 而且我已经将chmod 777设置为文件

1 个答案:

答案 0 :(得分:2)

可能会有更多匹配的行,例如多余的空格,因此相等性测试并不完全匹配。

如果要测试文件中是否存在匹配的行,可以仅测试grep的退出状态,而不是将输出存储在变量中。

if grep -q "#CONFIGURAZIONEHDMI" /boot/config.txt; then
    echo "reboot con la configurazione LCD"
    sudo rm -f /boot/config.txt
    sudo cp /boot/config_lcd.txt /boot/config.txt
    sleep 2
    sudo  reboot -n
fi  

-q选项告诉grep不要打印匹配的行,它只是设置退出状态。