Shell脚本笔记
截取要求中的“最左”与“最右”
注意:pattern只能是从最左开始匹配,如果不包含第一个字符,那么就不能工作。
${variable#pattern} - 截去从最左开始匹配的最短符合pattern的子串
${variable##pattern} - 截去从最左开始匹配的最长符合pattern的子串
${variable%pattern} - 截去从最右开始匹配的最长符合pattern的子串
${variable%%pattern} - 截去从最右开始匹配的最长符合pattern的子串
例如:
variable="Now is the time"
echo ${variable} // 打印出 Now is the time
echo ${variable#N*i} // 打印出 s the time
echo ${variable##N*i} // 打印出 me
echo ${variable%time} // 打印出 Now is the
echo ${variable%%t*e} // 打印出 Now is
语法:${variable:offset:length}
例如:
var="hello"
var=${var:3:2}
echo $var //打印出 "lo"
【SHELL特殊的元字符】
*(pattern1|pattern2) 0次或者多次触发
例如,*([0-9]) 0个或者多个数字
?(pattern1|pattern2) 0次或者1次触发
例如,?([0-9]) 0个或者1个数字
+(pattern1|pattern2) 1次或者多次触发
@(pattern1|pattern2) 仅仅1次触发
!(pattern1|pattern2) 1次都不触发
例如,!(err*|fail*)表示,不能以“err”或者"fail"开头的词
【保留变量】
$IFS 这个变量中保存了用于分割输入参数的分割字符,默认识空格。
$HOME 这个变量中存储了当前用户的根目录路径。
$PATH 这个变量中存储了当前 Shell 的默认路径字符串。
$PS1 表示第一个系统提示符。
$PS2 表示的二个系统提示符。
$PWD 表示当前工作路径。
$EDITOR 表示系统的默认编辑器名称。
$BASH 表示当前 Shell 的路径字符串。
$0, $1, $2, ... 表示系统传给脚本程序或脚本程序传给函数的第0个、第一个、第二个等参数。
$# 表示脚本程序的命令参数个数或函数的参数个数。
$$ 表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。
$? 表示脚本程序或函数的返回状态值,正常为 0,否则为非零的错误号。
$* 表示所有的脚本参数或函数参数。
$@ 和 $* 涵义相似,但是比 $* 更安全。
$! 表示最近一个在后台运行的进程的进程号。
【参考文献】
Shell脚本调试技术 http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html
一个程序演示所有的shell编程知识 http://code.google.com/p/ldd6410/wiki/ShellScript
Linux Shell Scripting Tutorial A Beginner‘s handbook http://www.freeos.com/guides/lsst/