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]$
答案 0 :(得分:28)
您似乎有Windows样式行结尾(\r\n
) - 您需要将它们更改为unix样式(\n
)。如果您安装了dos2unix
,则可以使用它。您也可以使用sed
或awk
。
答案 1 :(得分:13)
使用某些编辑器(如记事本, notepad ++ (已测试))在Windows中编写脚本时,其行尾(EOL)转换问题。
sed,tr可以解决你只需要运行脚本的问题,但是如果你正在开发shell脚本,每次第一次转换使用时都会变得烦人,sed / tr命令然后运行你的脚本。
Notepad ++有一个转换END OF LINE CONVERSION(EOL)的选项。 怎么做: 转到修改> EOL转换> 选择 Unix / OSX
在这里,保存脚本文件并运行它。
答案 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