30
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

错误:

[b104@b104 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 
[b104@b104 Downloads]$ 
4

3 回答 3

40

似乎您有 Windows 样式的行尾 ( \r\n) - 您需要将它们更改为 unix 样式 ( \n)。如果你已经dos2unix安装,你可以使用它。您也可以使用sedor来完成awk

于 2013-09-04T08:02:26.420 回答
23

当使用一些编辑器(如记事本记事本++(已测试))在 Windows 中编写脚本时,它的行尾(EOL)转换问题。

如果您只需要运行脚本,sed 、 tr 可能会解决问题,但是如果您正在开发 shell 脚本,那么每次首先使用 sed/tr 命令转换然后运行您的脚本时,它都会变得很烦人。

Notepad++ 有一个转换 END OF LINE CONVERSION(EOL) 的选项。如何做到这一点:去编辑> EOL转换>选择Unix/OSX

在这里,保存脚本文件并运行它。

这是相同的屏幕截图

于 2016-04-03T12:25:03.860 回答
17

发生错误是因为 shell 不理解类似 DOS/Windows 的行尾,并且它需要 LF 而不是 CRLF。

您需要首先配置您的编辑器以使用类 Unix 的行尾或使用dos2unix命令来自动更改它,例如

dos2unix ./NetworkUtility.sh

在以下位置阅读更多详细信息:'\r': command not found

如果您使用 Vagrant,请查看:Windows CRLF to Unix LF Issues in Vagrant

于 2016-03-08T16:54:32.493 回答