SHELL脚本编程
林怀东
2005-3-12
******@.
Outline
Shell脚本简介
常用shell命令
Shell常用变量
流程控制
Shell函数
shell 脚本介绍
一个shell 脚本可以包含一个或多个shell命令,可用来自动完成通常在命令行上执行的重复循环或者复杂的工作,节省大量时间,且功能强大
shell脚本主要内容
脚本按行解释执行,每一行可以是命令、注解、或是流程控制指令等
脚本第一行以#! 开始,后面加所使用的shell(需指明整个路径名称) (如:以#!/bin/sh 指定使用Bourne Shell)
在脚本中执行一个命令的方法和在命令行中相同,可以前台或后台执行,也可设定一些环境变量
注释,# 后面的同一行文字为注释,解释器对此不予解释
脚本的流程控制近似于一般高级语言,这使得脚本的功能比DOS的批处理文件功能更加强大
常用shell命令
文件及文件属性操作
ls、cp、mv、rm
ln、ln –s、chmod、chown、chgrp
输入输出操作
echo 、cat
>>、>、<<、|
标准输入 0 、标准输出 1 、标准错误输出 2
目录操作
cd、 pwd、 ls dir
mkdir、 cp、 mv 、 rmdir、 rm -r
文本过滤
Head、 tail、 grep、sort、 uniq
sed、 awk
其他
find、expr
获取信息: man
正则表达式 ——sed与awk的基础
正则表达式是一些特殊或不很特殊的字符串模式的集合。
字符集包括:普通字符集和元字符集(通配符)
普通字符集:大小写字母、数字、空格、下划线
^ 行首
$ 行尾
* 一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 匹配[ ]内字符,可以是一个单字符,也可以是字符序列。可以使用”-“来表示[ ]内范围,如[1-5]等价于[1,2,3,4,5]。
\ 屏蔽一个元字符的特殊含义,如\$表示字符$,而不表示匹配行尾。
. 匹配任意单字符
几个常见的例子:
显示可执行的文件:ls –l | grep …x...x..x
只显示文件夹:ls –l | grep ^d
匹配所有的空行:^$
匹配所有的单词:[A-Z a-z]*
匹配任一非字母型字符:[^A-Z a-z]
包含八个字符的行:^……..$(8个.)
Sed命令
命令格式
sed ‘/pattern/ action’ files
pattern: 正则表达式
action: 操作,包括p、d、s
示例:
打印行:sed –n ‘/ 0\.[0-9][0-9]$/p’
删除行:sed ‘/^[Mm]ango/d’
执行替换/pattern1/s/pattern2/pattern3/g:
sed ‘s/paech/peach/g ’
使用多重sed sed –e ‘cmd1’……-e ’cmdN’ files:
sed –e ‘s/paech/peach/’–e ‘s/ *[0-9][0-9]\.[0-9][0-9]$/\$/’
在管道中使用sed
awk命令
命令格式
awk ‘/pattern/ {actions}’ files
示例:
字段编辑:awk –F: ‘{ print $1,$3}’ inputfiles
或:awk –F: ‘{ printf “%s is %s\n”,$1,$3}’ inputfiles
执行指定模式的操作:
awk ‘/ *\$[1-9][0-9]*\.[0-9][0-9] */ {print $0; next} /*\$0\.[0-9][0-9] */ {print $0}’
比较操作符:<、>、<=、>=、==、!=、value ~ /pattern/、value !~ /pattern/ (相关:&&、||)
awk ‘($2 ~ /^\$[1-9][0-9]*\.[0-9][0-9]$/) && ($3 < 75)’{ printf “……”}’ input_f
利用管道符将标准输入作为输入
shell变量
为使shell编程更加容易而且有效,系统提供了一系列shell变量,可以保存诸如文件名、路径名等有用信息,使系统获知用户相关设置
本地变量:在用户现在的shell生命期的脚本中使用,若shell启动另一个进程或退出,该变量值无效
环境变量:用于所有用户进程(子进程),环境变量可以在命令行中设置,但用户注销时变量值丢失。可将此变量放
SHELL脚本编程-精 来自淘豆网m.daumloan.com转载请标明出处.