从同事那拷贝过来一个shell脚本,执行不成功,提示bash解析器有问题
root@localhost:~# ./pps_check.sh /sys/class/pps/pps0/assert
-bash: ./pps_check.sh: /bin/bash^M: bad interpreter: No such file or directory
查阅资料,原来是同事的shell是Windows的DOS格式,linux不识别,只需将文件格式转换成unix的即可
补充下window dos和unix格式的区别:
UNIX格式,每行的行尾都是用一个0x0a字符(换行字符LF)表示的,而在WINDOWS/DOS下每行的行尾都是用0x0d 0x0a两个字符(回车字符CR,换行字符LF)所以上述报错信息中/bin/bash后面跟着一个^M, 可能就是行尾的一个符号linux不识别。
下面将文件转化为unix格式,
steps:
1. vim pps_check.sh
从打开的编辑页面下方,也可以看出是window dos格式的,
2. 进入命令行模式,输入命令 :set ff, 以查看文件格式,
通过结果看出文件格式为dos
3. 修改文件格式, 进入命令行,输入命令::set ff=unix
4. 保存文件并退出: :wq
5. 再执行一次该shell脚本,已经能执行成功
root@localhost:~#
root@localhost:~# ./pps_check.sh /sys/class/pps/pps0/assert
usage: ./pps_check.sh /sys/class/pps/pps[index]/assert
PPS event: seq 1744, sys_time 1568978072.619048856, sys_freq_off 0
PPS event: seq 1745, sys_time 1568978073.618971656, sys_freq_off 77005
PPS event: seq 1746, sys_time 1568978074.618984096, sys_freq_off -11999
PPS event: seq 1747, sys_time 1568978075.618979297, sys_freq_off 5000
PPS event: seq 1748, sys_time 1568978076.618967697, sys_freq_off 11000
PPS event: seq 1749, sys_time 1568978077.618965257, sys_freq_off 3000