'\ r':找不到命令

时间:2013-09-04 07:57:37

标签: shell

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]$ 

3 个答案:

答案 0 :(得分:28)

您似乎有Windows样式行结尾(\r\n) - 您需要将它们更改为unix样式(\n)。如果您安装了dos2unix,则可以使用它。您也可以使用sedawk

执行此操作

答案 1 :(得分:13)

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

sed,tr可以解决你只需要运行脚本的问题,但是如果你正在开发shell脚本,每次第一次转换使用时都会变得烦人,sed / tr命令然后运行你的脚本。

Notepad ++有一个转换END OF LINE CONVERSION(EOL)的选项。 怎么做: 转到修改> EOL转换> 选择 Unix / OSX

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

Here is screenshot of the same

答案 2 :(得分:10)

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

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

dos2unix ./NetworkUtility.sh

详情请见:'\r': command not found

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