引言:个人感觉,Shell脚本对于Linux系统管理员太重要了,一条Shell语句可以达到几百条C语言代码的效果,尤其是当我们面对大型的集群的时候,Shell脚本更是把我们的工作效率提高了上千倍,听说Google的运维工程师就是通过Shell脚本来管理上千台的Linux主机,另外,Linux中很多可执行文件都是Shell写的,所以,我们一定要学好Shell脚本。

 

1.  Shell的功能和定义

Shell是一个功能强大的计算环境,既可以将其作为命令解释器,也可以将其作为编程语言,(个人感觉:类似于windows下的批处理文件,但要比它更强大Shell的功能主要包括以下几个方面

l  接受来自键盘的命令

l  检查命令的正确性

l  命令错误则给出报错信息

l  命令正确则使用相应的系统调用执行命令(产生进程)

l  命令执行完毕,给出命令执行的结果

2.  Shell脚本介绍

用户可以将Linux的命令以编程的方式组合起来提交给ShellShell负责解释执行这种程序设计语言所写的代码。Linux把这种程序设计语言构成的文件称为 Shell Script Shell脚本。

Shell脚本是包含一个或者多个Shell命令的集合,这些命令会按照编写的顺序而被依次执行。Shell提供另一种利用简单命令组合实现复杂功能的机制。Shell脚本中支持绝大多数编程语言中所能见到的程序控制结构,可以使用注释(“#”)对脚本的功能进行说明,可以使用条件测试表达式进行分支判断,可以使用循环语句处理大量数据,可以定义变量、数组等,Shell脚本也提供对函数的支持。

3.  Shell的通配符

*   匹配任意长度的任意字符

?   匹配任意一个字符

[]   匹配任意属于字符组的字符

例子:ls 20.[1234]

输出 : 20.2  20.3  20.4

也可以使用“-”符号来设定范围,比如[0-9]表述数字0~9之间的任意数字,[a-z]表示任意一个小写字母,[A-Z]表示任意一个大写字母。[1-389]表示1,2,3,8,9之中的任意一个数字。当然,也可用“,”隔开,比如[a-h,W-Z]

同时,可以用“!”表示取反,比如[aoeiu]表示所有的元音字母中的任意一个,而[!aoeiu]表示所有的辅音字母中的任意一个字母。

{}   将大括号中的字符串以及前导字符串和后缀字符串作为匹配条件

例子:echo m{oon ,op,ud }s

输出: moons mops muds

其基本格式为:前导字符串{字符串1,字符串2……..}后缀字符串

4.  Shell的条件执行

||   逻辑或(两个管道符号

     用于连接两个命令,当前一个命令执行不成功才执行后一个

&&  逻辑与

     也用于连接两个命令,当前一个命令执行成功才执行后一个

5.  Shell基础知识

l  Shell脚本是大小写敏感的

l  Shell脚本中使用“#”做为注释

l  错误重定向为 2>

l  错误和标准输出的重定向为 &>

l  要善于使用管道命令,因为管道命令可以连接两个不同的命令

l  如果遇到比较耗费时间的Shell进程,可以在后面加上 &”符号,使其在后台运行

l  如果想在同一行输入多条指令,就用“;”隔开

6.  单引号,双引号及反引号

l  双引号会对字符串中出现的“$, ,\”和“`”进行替换。

l  单引号不会对任何符号进行替换

l  反引号会把字符串当命令执行(所谓的反引号就是ESC键下面的,数字1左边的那个键

7.  指定使用的Shell

Shell脚本文件的第一行必须遵循标准,来指定相应的Shell来运行脚本。

示例格式为:

#!/bin/bash

8.  运行脚本的两种方法

l  给脚本加上执行权限,然后用 ./bash.sh (参数)

l  直接使用sh bash.sh (参数)