在windows下编辑好Shell脚本,在Linux中运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hsl_1990_08_15/article/details/50897374

       今天闲来无事,想要挑战下自己,于是打开Notepad++就开始写了。

#!/bin/bash
echo "Hello world!"

这是我写的第一个Shell脚本程序,看着我都想笑,因为我刚入门。

于是乎命名为test.sh,具网上说,Shell脚本都是以这样命名的,这样命名的Shell已经被大家所接受。

打开虚拟机中的Linux系统,利用Xftp把这个文件拽到Linux的一个目录下,我放到了root下,用的root的账号,虽然不建议使用,但是我相信自己的第一个程序不会出错。

但是好景不长,当我去执行的时候,失败了。

[root@master ~]# ./test.sh
-bash: ./test.sh: 权限不够

于是就加了可执行的权限

[root@master ~]# chmod +x ./test.sh

再次执行这个脚本

[root@master ~]# ./test.sh 
-bash: ./test.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

郁闷了,这是什么情况,说是坏的解释器,怎么可能,于是从网上搜了下,原来在windows下编译的shell文件,每一行的结尾是\n\r,而在linux下文件的结尾是\n。

用cat -A filename时你可以看到这个\r字符被显示为^M

[root@master ~]# cat -A test.sh 
#!/bin/bash^M$
echo "Hello world!"[root@master ~]#

于是乎杀手锏出来了

[root@master ~]# sed -i 's/\r$//' test.sh

正则表达式sed -i 's/\r$//'filename
什么意思呢?
-i插入
s替代模式
\r$表示任何以\r结束的字符
整句意思是把以\r结束的字符换成空白

最终
[root@master ~]# ./test.sh 
Hello world!

我的第一个Shell脚本程序就这样结束了。


猜你喜欢

转载自blog.csdn.net/hsl_1990_08_15/article/details/50897374