Alliot's blog

【持续更新】shell脚本常见错误排查

  本文记录写新手在 shell 脚本的过程中经常遇到的报错与逃坑方案。

常见报错

  这里列举一些新手经常遇到的报错。

$’\r’: command not found或$’\r’: 未找到命令

原因

  用 Windows 的同学,经常会遇到这个问题,比如我,习惯性在桌面新建 .txt 文件,更改后缀名为 .sh,然后用 notepad++ 进行打开。这是由于 Windows 与 Unix 下换行符的差异导致的,Windows 默认新建 .txt 的文件格式为 dos 文件格式,Windows 下换行符其实为”\CR\LF”,Unix 下换行符为”\CR”。

解决方法

方法一: notepad++ 打开脚本,右键 notepad++ 右下角的 Windows(CR LF) 修改为 Unix 保存即可。
方法二: 使用 dos2unix 转换格式

1
2
yum install dos2unix # CentOS
apt-get install dos2unix # Ubuntu

执行:

1
dos2unix filename

即可。

[-d: command not found或[-d: 未找到命令

  出现这个报错一般是部分新手不知道 if 语句两边的中括号要加空格。如下列代码:

1
2
3
4
#!/bin/sh
if [-d /etc]; then
echo "ok"
fi

就会出现这个报错。 改成如下即可:

1
2
3
4
#!/bin/sh
if [空格-d /etc空格]; then
echo "ok"
fi

Tips

脚本检验

  脚本在运行前最好检查一下语法错误:

1
2
sh -n filename # 不运行脚本,只检查语法错误
sh -x filename # 运行并跟踪脚本执行过程

关于这方面详细可以参考 shell脚本——调试(-n / -x /-c)

------ 本文结束 ------

本文标题:【持续更新】shell脚本常见错误排查

文章作者:Alliot

发布时间:2019年07月08日 - 16:07

最后更新:2019年07月08日 - 19:07

原始链接:https://www.iots.vip/post/shell-error-checking.html

许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 转载请保留原文链接及作者。

如果此文为您解决燃眉之急或是带来些许明朗,不妨打赏Alliot一杯香茗或是一杯咖啡