一、概述
shell 脚本是自动化运维的重要工具,是每个运维人员必备的技能之一。shell 脚本与 DOS 下的批处理相似,就是将一系列命令写入一个或几个文件中,方便的一次执行。同时,shell 脚本还支持循环、条件判断和正则表达式等语法。可以这么说,shell 脚本是优秀的运维人员手中的利器。
二、基本语法
1.开头
#!/bin/bash 每一个 shell 脚本都以 #!/bin/bash 开头,它告诉系统执行这个脚本时所调用的是 bash,bash 也可以换成 csh、sh 等 shell,这要根据执行脚本时 Linux 运行的是哪种 shell(可以使用 cat /etc/shells 来查看系统支持的 shell 类型)来决定。2.注释 # 好的程序都有简单明了又不冗余的注释,shell 脚本使用 # 来开始一行注释,任何以 # 开头的行都是注释。
一个简单的shell脚本
脚本的执行可以使用 sh 命令,也可以使用 . 命令,还可以是用脚本直接执行,不过要给脚本执行的权限:chmod +x hello.sh
3.变量
shell 脚本中的变量都是字符串组成的,不需要事先声明,当要用到一个变量的时候,直接以 NAME=VALUE 的形式来使用。比如
变量的引用是由 $ 开始的,如上,引用变量 a,就使用 $a。
在 shell 脚本中,变量默认都是以字符串形式存储的,比如
如果要避免这种情况,可以使用 declare 命令来显示声明变量,declare 是 bash 的一个内建函数,使用 -i 选项声明把变量声明成整数,比如
4.变量类型
本地变量:作用域为整个 shell 进程 使用 NAME=VALUE 形式的变量都是本地变量,本地变量从出现的时候开始,在整个 shell 脚本执行的过程中都存在 局部变量:使用 local 声明,作用域为当前代码段 局部变量一般出现在函数的内部,为了与外部同名的变量进行区分,使用 local 前缀,表示它只存在于函数执行的过程中,与外部变量无关 环境变量:使用 export 声明,作用域为当前 shell 进程及其子进程 环境变量即为 shell 的环境变量 特殊变量 特殊变量主要有以下几个: $1 $2 ...:$n 表示的是脚本所跟的第 n 个参数,比如
$?:上一条语句执行的状态返回值。每一条语句的执行都有状态返回值,执行成功返回值是 0,执行不成功返回值是非 0 的,类似 C 语言,比如
执行成功
执行不成功
5.条件测试
shell 脚本进行条件测试的方式有三种 test expression [ expression ] [[ expression ]] 其中最常使用的是第二种,这里要注意的一点是,expression 的左右两边都要有一个空格。6.测试条件
整数比较 -gt:greater than 大于 -ge:greater than and equal 大于等于 -lt:小于 -le:小于等于 -eq:等于 -ne:不等于
字符串比较(ASCII 顺序)
== > < -n:测试字符串是否为空 -z:测试字符串是否不空 注:字符串变量要加引号文件测试
-e FILE:exist 判断文件是否存在 -f FILE:file 判断是否是普通文件 -d FILE:dictionary 判断是否为目录 -h/-L FILE:是否为符号链接 -r FILE:当前用户是否有读权限 -w FILE:当前用户是否有写权限 -x FILE:当前用户是否有执行权限 -s FILE:文件大小不为零
7.逻辑比较
&&:与 ||:或 !:非 8.组合条件测试 -a:与 -o:或 !:非关于逻辑比较和组合条件测试的区别请看着两个表达式:
if [ $? -gt 1 -a $? -lt 3 ]
if [ $? -gt 1 ] && [ $? -lt 3 ]
区别一目了然.
三、总结
基础部分先说到这里了 ^ ^