从网上复制shell脚本 到 linux下运行 碰到的各种问题汇总
快捷键Ctrl+U查看网页源码
一、报错现象:': No such file or directory
解决方法:在linux系统下执行:dos2unix filename
问题原因:本质是文件中二进制符号^M乱码问题
参考链接:Linux下去掉^M的四种方法_linux shell_脚本之家
二、报错现象:env: can't execute 'bash': No such file or directory
解决方法:将#!/bin/bash 替换为 #!/bin/sh
问题原因:本质是sh和bash问题
从 ubuntu 6.10 开始,ubuntu 就将先前默认的 bash shell 更换成了dash shell,其表现为 /bin/sh 链接倒了 /bin/dash 而不是传统的 /bin/bash。
可以通过 ls -l /bin/*sh 命令看到:
所以提示找不到bash,解决方法 使用 bash 代替 sh 运行脚本:bash test.sh 或者 将#!/bin/bash 替换为 #!/bin/sh
三、各种标点符号乱码问题
1、报错现象:提示xxx quot: not found
解决方法:用" 替换 "
问题原因:标点符号" 乱码问题,用" 替换 " 即可
2、&&标点乱码问题:用&&,替换乱码字符&&
3、>>乱码问题:用>>,替换乱码字符 >>
4、>或<乱码问题:用>或<,替换乱码字符 >
四、报错现象:Syntax error: Bad for loop variable错误解决方法
参考链接:
Syntax error: Bad for loop variable错误解决方法
语法错误:循环变量错误(Syntax error: Bad for loop variable)_电脑培训
解决方法:将for循环的方法替换为while循环的方法
问题原因:for (( expr ; expr ; expr ))
这种 C 语言格式语法在sh
不可用
从 ubuntu 6.10 开始,ubuntu 就将先前默认的 bash shell 更换成了dash shell,其表现为 /bin/sh 链接倒了 /bin/dash 而不是传统的 /bin/bash。
可以通过 ls -l /bin/*sh 命令看到:
所以在使用 sh 命令执行脚本的时候实际使用的是 dash,而 dash 不支持这种 C 语言格式的 for 循环写法。
五、linux #!/bin/sh脚本中eq,ne,le,ge,lt,gt意义
参考链接:https://www.cnblogs.com/hankyoon/p/12612549.html
if [ 1 -ne 1 ];then
...
fi
-eq: 等于
-ne: 不等于
-le: 小于等于
-ge: 大于等于
-lt: 小于
-gt:大于
六、报错现象:syntax error: unexpected end of file (expecting "}")
解决方法:找到缺少的}符号,加上即可
问题原因:{ }符号没有成对出现