Если оператор не выполняет аргумент - PullRequest
0 голосов
/ 06 апреля 2019
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. Когда я пытаюсь выполнить это, это не возвращает то, что я ожидаю. Теперь возвращается:

[E] no device detected
#CONFIGURAZIONEHDMI

но он не начинает заменять файл и перезагружается.

P.S .: Пользователь и файл имеют права делать это И я уже установил chmod 777 файл

1 Ответ

2 голосов
/ 06 апреля 2019

В строке может быть больше совпадений, например, дополнительные пробелы, поэтому тест на равенство не совсем точно.

Если вы хотите проверить, существует ли совпадающая строка в файле, вы можете просто проверить состояние выхода 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 не печатать совпадающую строку, она просто устанавливает свой статус выхода.

...