Ответ 1
Кажется, что у вас есть окончание строк в стиле Windows (\r\n
) - вам нужно изменить их на стиль unix (\n
). Если у вас установлен dos2unix
, вы можете его использовать. Вы также можете сделать это, используя sed
или awk
.
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]$
Кажется, что у вас есть окончание строк в стиле Windows (\r\n
) - вам нужно изменить их на стиль unix (\n
). Если у вас установлен dos2unix
, вы можете его использовать. Вы также можете сделать это, используя sed
или awk
.
Проблема с преобразованием конца строки (EOL), когда script написана в окнах, используя некоторые редакторы, такие как блокнот, блокнот ++ (протестирован).
Sed, tr может решить проблему, если вам просто нужно запустить script, но если вы разрабатываете оболочку script, она становится раздражающей каждый раз, когда сначала конвертирует, используя команду sed/tr, затем запустите ваш script.
В Notepad ++ есть возможность конвертировать END OF LINE CONVERSION (EOL). Как это сделать: перейдите в Изменить > Преобразование EOL > выберите Unix/OSX
Здесь вы идете, сохраните файл script и запустите его.
Ошибка происходит, потому что оболочка не понимает окончания строк в DOS/Windows, и ожидает LF вместо CRLF.
Вам нужно будет сначала настроить ваш редактор на использование окончаний строк в стиле Unix или использовать команду dos2unix
для ее автоматического изменения, например
dos2unix ./NetworkUtility.sh
Подробнее читайте на странице '\r'
: команда не найдена.
Если вы используете Vagrant, проверьте: Windows CRLF на проблемы Unix LF в Vagrant