引言:个人感觉,Shell脚本对于Linux系统管理员太重要了,一条Shell语句可以达到几百条C语言代码的效果,尤其是当我们面对大型的集群的时候,Shell脚本更是把我们的工作效率提高了上千倍,听说Google的运维工程师就是通过Shell脚本来管理上千台的Linux主机,另外,Linux中很多可执行文件都是Shell写的,所以,我们一定要学好Shell脚本。
1. Shell的功能和定义
Shell是一个功能强大的计算环境,既可以将其作为命令解释器,也可以将其作为编程语言,(个人感觉:类似于windows下的批处理文件,但要比它更强大)Shell的功能主要包括以下几个方面
l 接受来自键盘的命令
l 检查命令的正确性
l 命令错误则给出报错信息
l 命令正确则使用相应的系统调用执行命令(产生进程)
l 命令执行完毕,给出命令执行的结果
2. Shell脚本介绍
用户可以将Linux的命令以编程的方式组合起来提交给Shell,Shell负责解释执行这种程序设计语言所写的代码。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 (参数)