第19章 Shell脚本基础
19.1 Shell基本语法
19.1.1 什么是Shell
Shell是一个命令解释器,在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可以是交互式的,也可以是非交互式的,如图19-1所示。
图19-1 Shell与内核交互
我们所输入的命令计算机是不能识别的,这时就需要一种程序来对命令进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。
19.1.2 编程语言分类
编程语言主要有低级语言和高级语言。
1.低级语言
低级语言分为机器语言和汇编语言。机器语言是二进制语言,仅是0和1这两个数字的排列组合,也是机器唯一能够识别的语言,因此称为机器语言。汇编语言是符号语言,使用助记符来代替操作码,也就是用符号代替机器语言的二进制码。机器语言和汇编语言都是面向机器的语言。
2.高级语言
高级语言是比较接近自然语言或者说人类语言的一种编程语言,用人们能够容易理解的方式进行程序编写。高级语言分为静态语言和动态语言。静态语言是编译型语言,如C、C++、Java,该类语言有一个程序开发环境,不需借助额外的二进制程序,可以编写代码,代码编写完成后,需要编译器将其直接转换成二进制后即可独立运行。
编译器可以将人类理解的语言翻译成机器理解的语言。
GCC是一套功能强大、性能优越的编译器,它是GNU计划的代表作品之一。GCC是Linux平台下最常用的编译器。GCC的原名为GNU C Compiler,即GNU C语言编译器,随着GCC支持的语言越来越多,它的名称也逐渐变成了GNU Compiler Collection。
动态语言是解释型语言,如PHP、Shell、Python、Perl。动态语言在某个代码编写完成以后,不需转换成二进制格式,而是借助解释器在代码执行当中解释转换(边解释,边执行)。
19.1.3 什么是Shell脚本
一般脚本的命名都是以.sh
结尾的,实际上,Linux系统不以扩展名识别文件类型,但为了统一标准,尽量使用.sh结尾。
!/bin/bash
的作用是告诉脚本使用的是哪种Shell作为命令解释器。如果不指定Shell,则以当前Shell作为执行的Shell。
在Shell中以“#”开头,表示整行被当作一个注释,执行时被忽略。
(2)创建Shell程序的步骤如下。
① 创建一个包含命令和控制结构的文件。② 修改这个文件的权限使它可以执行,使用chmod +x test.sh
。③ 检测语法错误。④ 执行./test.sh
。
(3)Shell脚本的执行通常有以下几种方式。
① /root/test.sh
(使用绝对路径执行脚本)或者 ./test.sh
(当前路径下执行脚本的话,要有执行权限 chmod +x test.sh)。
② bash test.sh
或sh test.sh
(直接使用解释器执行脚本,这种方式可以不对脚本文件添加执行权限)。
③ source test.sh
(可以没有执行权限)。
④ sh < test.sh
或者cat test.sh |sh(bash)
。
19.2 Shell变量及运用
19.2.1 Shell变量
变量是Shell传递数据的一种方法,是用来代表每个值的符号名。可以把变量当成一个容器,通过变量,可以在内存中存储数据,也可以在脚本执行中进行修改和访问存储的数据。
1.变量的设置规则如下
① 变量名通常是大写字母,它可以由数字、字母和下画线组成。注意变量名区分大小写,且不能以数字开头。
② “=”用于给变量赋值,等号两边不能有空格。(除了变量赋值,if判断的时候需要空格)
③ 变量存储的数据类型是整数值和字符串值。
④ 在对变量赋予字符串值时,建议用引号将其括起来。因为如果字符串中存在空格,需要使用单引号或双引号将整个字符串括起来。
⑤ 要对变量进行调用,可以在变量名前加“$”。
⑥ 如果需要增加变量的值,可以进行变量值的叠加。不过变量需要用双引号括起来,如“$变量名”或用花括号括起来如 ${变量名}。
2.按照变量的作用可以分成以下4类
① 用户自定义变量。
② 环境变量:这种变量中主要保存的是与系统操作环境相关的数据。
③ 位置参数变量:这种变量主要用来向脚本传递参数或数据,变量名不能自定义,变量作用是固定的。
④ 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量的作用也是固定的。
3.按照变量的作用域可以把变量分成两类:全局变量和局部变量
① 局部变量是Shell程序内部定义的,其使用范围仅限于定义它的程序,对其他程序不可见,包括用户自定义变量、位置变量和预定义变量。
② 全局变量是环境变量,其值不随Shell脚本的执行结束而消失。
例19.3:变量值的叠加,使用“${}”。
$name是${name}的简化版本,但是在某些情况下,还必须使用花括号括起来的方式消除歧义并避免意外的结果。