今天闲来无事,想要挑战下自己,于是打开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结束的字符换成空白
最终
我的第一个Shell脚本程序就这样结束了。
最终
[root@master ~]# ./test.sh
Hello world!
我的第一个Shell脚本程序就这样结束了。