第五章 Shell编程
在shell中,case更为高效(记得书上提到了这个,不过在这遍整理时,没发现原话)
case word in
模式) 命令;; #结尾是两个";"
...
模式) 命令;;
esac
==========================================
Shell内部变量
$# 参数个数
$* shell所有参数
$@ 类似$*
$- Shell用的选择项
$? 上次执行命令的返回值
$$ Shell的进程标识符
$! 用&启动的最后一个命令的进程标识符
$HOME cd命令的缺省参数
$IFS 参数分割词的字符表
$MAIL 信件文件,当其改变时给出信息you have mail
$PATH 搜索命令的目录表
$PS1 提示字符串,缺省为$
$PS2 后继命令行提示符,缺省为>
date命令输出结果如下:
Tue Nov 2 17:36:21 CST 2010
则,set `date`的结果是:
$1 = 'Tue'
$2 = 'Nov'
...
$6 = '2010'
==========================================
Shell模式匹配规则
* 匹配任意字符串,包括空字符串
? 匹配任意单个字符
[xyz] 匹配xyz中的任意字符
"..." 完全匹配...,也可写成'...'
/c 匹配文字c
a|b 与a或b匹配
/ 对于文件名,仅与表达式中显式的/符号相匹配;对于case语句,与其他字符一样匹配
. 作为文件名的第一个字符,仅与表达式中显式的.符号相匹配
==========================================
which 在路径中查找命令的位置
==========================================
Shell中的for,while,until循环
for i in 文件列表
do
循环体,$i依次取表中的元素值
done
for i #隐含表示取全部参数,即in $*
do
循环体,$i依次取表中的元素值
done
while 命令
do
循环体,只要命令返回状态为真就继续执行
done
until 命令
do
循环体,只要命令返回状态为假就继续执行
done
==========================================
Shell中变量的赋值
$var var的值,若var无定义则无值
${var} 同上,用于变量后面跟着字母数字串的情况
${var+thing} var有定义时,取值var;否则无值
${var-thing} var有定义时,取值var;否则取值thing,但$var不变,即仍无定义
${var=thing} var有定义时,取值var;否则取值thing,但$var的值设为thing
${var?message} var有定义时,取值var;否则打印message并退出shell,若message为空,打印:var:parameter not set
示例:
t = ${1-60} #如果没有提供参数,即$1未定义,则t=60,否则t=$1
==========================================
Shell信号值
0 shell退出
1 挂断
2 中断(DEL键)
3 退出(Ctrl+/,导致突然撤出内核)
9 强迫终止(不能捕获或不予执行)
15 终止,由kill产生的缺省信号
trap捕获中断
trap 命令序列 信号值