'\ r': команда не найдена

echo "Select your option:"
echo "1. Change ip address"
echo "2. Add route"
echo "3. Reboot"
echo "4. Exit"
read A
case $A in
    1)
            echo "Add Ip address"
            read IP
            echo "Add Netmask"
            read Netid
            echo "Add name of interface"
            read Interface
            ifconfig ${Interface} ${IP}/${Netid}
            if [ $? -ne 0 ];then
                    echo "Ip address not configured"
            fi
            ;;
    2)
            echo "Add Destination"
            read dst
            echo "Add Netmask"
            read Netid
            echo "Add Gateway"
            read gw
            route add $dst mask $Netid gw $gw
            if [ $? -ne 0 ];then
                    echo "Route not added"
            fi
            ;;
    3)
            reboot
            ;;
    4)
            echo "Bye"
            exit 0
            ;;
    default)
            echo "Wrong selection"
            exit 1
esac

Ошибка:

[[email protected] Downloads]$ ./NetworkUtility.sh 
./NetworkUtility.sh: line 1: $'\r': command not found
Select your option:
1. Change ip address
2. Add route
3. Reboot
4. Exit
1
': not a valid identifier 7: read: `A
./NetworkUtility.sh: line 8: $'\r': command not found
./NetworkUtility.sh: line 9: syntax error near unexpected token `newline'
'/NetworkUtility.sh: line 9: `case $A in 
[[email protected] Downloads]$ 

Ответы

Ответ 1

Кажется, что у вас есть окончание строк в стиле Windows (\r\n) - вам нужно изменить их на стиль unix (\n). Если у вас установлен dos2unix, вы можете его использовать. Вы также можете сделать это, используя sed или awk.

Ответ 2

Проблема с преобразованием конца строки (EOL), когда script написана в окнах, используя некоторые редакторы, такие как блокнот, блокнот ++ (протестирован).

Sed, tr может решить проблему, если вам просто нужно запустить script, но если вы разрабатываете оболочку script, она становится раздражающей каждый раз, когда сначала конвертирует, используя команду sed/tr, затем запустите ваш script.

В Notepad ++ есть возможность конвертировать END OF LINE CONVERSION (EOL). Как это сделать: перейдите в Изменить > Преобразование EOL > выберите Unix/OSX

Здесь вы идете, сохраните файл script и запустите его.

Вот скриншот того же

Ответ 3

Ошибка происходит, потому что оболочка не понимает окончания строк в DOS/Windows, и ожидает LF вместо CRLF.

Вам нужно будет сначала настроить ваш редактор на использование окончаний строк в стиле Unix или использовать команду dos2unix для ее автоматического изменения, например

dos2unix ./NetworkUtility.sh

Подробнее читайте на странице '\r': команда не найдена.

Если вы используете Vagrant, проверьте: Windows CRLF на проблемы Unix LF в Vagrant