Shell
shell是指一种提供了访问操作系统内核服务界面的应用程序。Ken Thompson的sh是第一种Unix Shell,而Windows Explorer则是一个典型的图形界面Shell。而Shell脚本(shell script),是则是指为shell编写的脚本程序。
和其他脚本程序一样,Shell脚本只许一个解释器就可以运行。在Linux下,默认安装了Shell解释器,而其中最为流行的就是bash。
变量
bash中的变量分为以下几类:
- 本地变量,作用域为整个bash进程,在脚本中可以直接使用等于号声明。
VARNAME=VALUE
- 局部变量,作用域为当前代码段,需要使用local关键字声明。
local VARNAME=VALUE
- 环境变量,作用域为当前shell进程及其子进程,需要使用export声明。
export VARNAME=VALUE
- 位置变量
$0 #脚本的路径+文件名 $1,$2,... #脚本的参数,当数字大于10时需要加大括号以免混淆(例如${10})。 $* #脚本的所有参数 $# #脚本的参数个数
- 特殊变量
$? #上一个命令的执行状态返回值
在shell中,程序执行可能有两类返回值,一是程序的执行结果,也就是平时执行各种命令所返回的数据。二则是程序状态返回代码。为从0到255的数字,其中:
0:正确执行
1-255:错误执行
使用特殊变量就能得到上一条命令的状态返回值。
脚本在执行时会启动一个子shell进程。命令行中启动的脚本会继承当前shell的环境变量,而系统自动执行脚本(非命令行启动)需要自我定义所需各环境变量。
在脚本中使用
${VARNAME}
可以引用变量。在不引起混淆的情况下,大括号可以省略。条件判断
在shell中,条件测试可以使用下面的表达式来进行。
[ expression ] #注意方括号和expression有一个空格 [[ epxression ]] #注意方括号和expression有一个空格 test expression
条件测试的类型共有三种:整数测试,字符测试,文件测试。这里首先介绍最普遍的整数测试。
整数测试用于测试两个整数之间的关系,与大部分编程语言不同的是,在shell脚本中需要在两个常量或者变量间使用不同操作符的,才可以进行整数测试。
-eq #= -ne #!= -gt #> -lt #< -ge #>= -le #<=
逻辑关系
根据短路求值的原则,在逻辑运算符后侧的语句会根据前侧语句的真假而决定是否进行操作,因此使用逻辑运算符可以实现简单的条件判断。
例如在使用逻辑与(AND)时,第一个条件为假时,第二条件不再判断;而第一个条件为真时,第二条件必须判断。逻辑或(OR)则反之。
&& #逻辑与, AND || #逻辑或, OR
if语句
if CONDITION; then statement ... else statement ... fi
算术运算
在shell脚本中进行算术运算,可以使用以下几种方式:
let EXPRESSION $[EXPRESSION] $((EXPRESSION)) expr EXPRESSION C=`expr $A + $B` # 表达式各操作数字及运算符之间要有空格,并要使用命令引用