shell脚本的执行方式
echo输出命令
命令语法
echo ""
其中如果输出的内容中有空格,则需要加双引号,否则可以省略。
我们用hello world!演示时候发现报错了
这是因为!在shell中有着特殊作用,我们要想输出它就要先抹去他的作用,改成单引号。
echo ''
具体单双引号的区别我们之后会在运算符详细解释,我们要注意,echo命令是有选项的:
-e 支持反斜线控制的字符转换
内容如下:
我们来举两个例子
/b 退格键删除左侧字符
echo "abc"
echo -e "ab/bc"
我们发现第一条命令输出了abc,而第二条命令输出了退格键,删除了字符b,剩下了ac。
制表符与换行符
echo -e "a\tb\tc\nd\te\tf"
我们发现ab之间加了tab,而cd之间加了换行符。
按照十六进制ASCII输出
echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"
输出颜色
echo -e "\e[1;31m abcd\e[0m"
我们发现abcd用红色输出了,这里解释一下
-e 是用来支持特殊符号
\e[1是用来代表开启颜色输出
\e0m是用来代表终止颜色输出
中间的31m abcd是指用红色输出abcd
这里支持的颜色有
30m = 黑色
31m = 红色
32m = 绿色
33m = 黄色
34m = 蓝色
35m = 洋红
36m = 青色
37m = 白色
第一个脚本
#vi hello.sh
#!/bin/Bash
#The first program
#Author:Myh4ck1ife
echo -e “Mr.Myh4ck1ife is the most honest man in the world”
Linux虽然是没有扩展名一说的,但是这里是为了让我们自己意识到这是一个shell脚本,所以建议加上。
#的所用是注释,但是我们shell中的第一句:#!/bin/Bash并不是注释的意思,这里的作用是为了表示下面是一个脚本,如果我们是一个很简单的脚本,这一句写不写都行,但是如果脚本中嵌入了其他语句,就有可能出错,所以所有的脚本我们还是写上这句,不可或缺。剩下的#后面就都是注释了,随着我们之后shell的复杂化,我们要做好注释。
创建sh目录
mkdir sh
这样我们把所有的脚本都放在这个目录,比较整齐规范,且便于管理。
切换到sh目录
cd sh
写入脚本
vim hello.sh
保存退出
:wq
这里我们的shell脚本就写完了
脚本执行
方法一
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
方法二
通过bash调用执行脚本
bash hello.sh
我们用bash调用的时候,甚至不用赋予执行权限,但我们最习惯的方法其实还是方法一。
补充
cat命令我们很熟悉了,它有一个选项是
-A 显示所有内容
会将其中隐藏的符号有所显现,比如回车符显示为 $
但是如果我们在windows下编写一个相同的脚本看看的话
我们用WinSCP传一下
这里的hellp是linux下编写的,hello是win下编写的,我们在cat一下看看
这里我们发现回车符发生变化,这是因为linux下和windows下的回车符不相同,这样也就是说会不匹配,我们运行一下会报错。
所以我们要对它做一个转换,让他从windows转换成linux
我们用到如下命令
dos2unix 文件名
即从dos到unix的转换,我们用之前先安装上这个命令。
dos2unix的安装
yum -y install dos2unix
我们这里却报错了
我们百度查询到输入以下命令即可解决
yum clean all
yum makecache
可是我们又遇到了新问题
继续百度解决问题
原来是我们上次学rpm包安装的时候yum源中的地址发生了改动,我们改一下即可。
cd /etc/
ls
cd yum.repos.d
vim CentOS-Media.repo
更改即可
我们重新安装,发现又有报错。
后来我发现是yum源改错了,我改成了centos5的源而且是i386架构的。所以进行一下改正。因为我这里觉得改正比较麻烦,所以就直接改成国内的源了。
yum源的更换
切入yum源目录
cd /etc/yum.repos.d
备份一下系统的源
mv CentOS-Media.repo CentOS-Media.repo.bak
下载163网易的yum源
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
更新yum配置
yum makecache
然后我们只需要耐心的等待,然后再运行一下安装dos2unix命令即可
安装完成以后我们运行一下转换命令
dos2unix hello.sh
然后我们cat -A发现回车符已经正常,bash也能正常运行
当然相同的unix2dos也是存在的。