学习Shell脚本之前,我们有必要先来认识认识什么叫Shell?谈到这个问题,我们首先来回忆一下计算机自底向上的体系,最下层是硬件,上面是驱动,上面是操作系统,再上面是Shell,即所谓的外壳。
Shell其实是用户和操作系统进行人机互动的一个interface。主要通过命令行来使系统完成某种工作,因此Shell最简单的定义为—命令解释器:可以把用户的信息传递给操作系统,也可以把操作系统的处理结果翻译给用户。
最常用的Shell:sh 、csh、bash等等。
在shell中使用 # 在行首进行注释;
注意: sh里面没有多行注释,只能每一行加一个 # 号;
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
#!usr/bin/bash
# shell脚本开头 通常会以 #! 开头
# 这个是一个标识符,表示在没有指定执行器时默认的执行器。
也可以是如下
#!/usr/bin/env bash
甚至指定python作为解释器(运行python脚本)
#!/aaa/bbb/python
执行之前用命令 chmod +x 来修改脚本文件的权限,使其有可执行权限。
chmod a+x demo.sh
四种执行脚本的区别
./demo.sh
bash demo.sh
.demo.sh
source demo.sh
第3和第4种方式是一样效果。
提示:通常修改系统配置文件中如/etc/profile的PATH等变量后,使之在当前shell中生效。
sh -n demo.sh 仅调试syntax error
sh -vx demo.sh 以调试的方式执行,可以查看执行的过程
1.‘ ’ 单引号,和C语言中的“”一样, 是字符串的限定符,保持里面的字面值,不作出解释,请看2示例
2." " 双引号,对括号内的内容进行解析,如下解析变量
[root@centosNode6 ~]# var1=aaa
[root@centosNode6 ~]# echo '$var1'
$var1
[root@centosNode6 ~]# echo "$var1"
aaa
3.``反引号,在Esc键下面,执行并引用一个命令,即会解析引号内的命令
[root@centosNode6 ~]# echo echo hello
echo hello
[root@centosNode6 ~]# echo 'echo hello'
echo hello
[root@centosNode6 ~]# echo "echo hello"
echo hello
[root@centosNode6 ~]# echo `echo hello`
hello
4.| 竖线,即管道符,将前面命令处理得到的结果给管道后面进行处理
[root@centosNode6 ~]# echo "www.baidu.com"|awk -F. '{print $1}'
www
[root@centosNode6 ~]# echo "www.baidu.com"|awk -F. '{print $2}'
baidu
5.\ 斜杠,转义字符,可以对符号进行转义,取它的字面意思,去掉特殊含义
[root@centosNode6 ~]# echo ""hello""
hello
[root@centosNode6 ~]# echo "\"hello\""
"hello"
6.echo 打印输出
[root@centosNode6 ~]# echo hello
hello
[root@centosNode6 ~]# echo 'hello'
hello
[root@centosNode6 ~]# echo "hello"
hello
7.$? 上一条命令执行是否成功的结果,0 为成功,其他非 0 均为失败,该命令很重要,经常用到。如下,
[root@centosNode6 ~]# ping -c1 www.baidu.com &>/dev/null
[root@centosNode6 ~]# echo $?
0
[root@centosNode6 ~]# ping -c1 www.baid.om &>/dev/null
[root@centosNode6 ~]# echo $?
2
如果觉得有帮助,请点个赞哦***^ _^***