shell脚本学习笔记--基础(1)

shell脚本学习笔记--基础(1)

    • 简介
    • 脚本注释
    • 脚本解释器
    • 脚本执行
    • 脚本调试
    • 基本符号和命令含义

简介

学习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

四种执行脚本的区别

  1. 在子shell中执行,需要执行权限
./demo.sh
  1. 在子shell中执行,不需要执行权限
bash demo.sh
  1. 在当前shell中执行,不需要执行权限
.demo.sh
  1. 在当前shell中执行,不需要执行权限
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

如果觉得有帮助,请点个赞哦***^ _^***

你可能感兴趣的:(shell脚本学习笔记)