2010年10月26日星期二

Shell脚本

关于Linux Shell以及脚本应用的简单索引与指南用贴


本文是关于shell脚本的一篇索引,很是简略
内容很是含糊,仅作为记录,更多请参阅其他文档
它们用起来都是很实用的东西的说,属于Tools的范畴
是用熟练了反而能体会到它到来的好处的东西
这类话题相关入门的书籍和文章还是算较容易接触到的


目录结构

Linux默认的目录结构如下
/
/bin
/sbin
/etc
/dev
/dev/null
/dev/random
/dev/urandom
/home
/mnt
/lib
/root
/tmp
/usr
/usr/bin
/usr/include
/usr/lib
/usr/local
/var
/var/log
/var/mail
/var/spool
/var/tmp
每个目录有固定的用途,这里不详述


man和info

用来查看帮助文档
还有额外的文档在/usr/share/doc/


sh - shell

shell的作用是执行程序和管理回话
bash是现在最常用的shell实现,在debian中还有一个较简单的dash
shell有部分命令是Builtin的,例如cd、echo、exit,还有job相关的jobs、fg、bg(kill在bash也算了),管道(这个不算命令来着,文件和流也是shell的重要部分)
在一个session中可以执行多个进程且可以嵌套,回话终止时会结束它的子进程除非用nohup(还有at、cron可用,ps或top可看到进程)
除了Emacs的快捷键可用,还有用来发送信号的信号的按键:C-c 终止、C-z 挂起、C-d 退出

shell也可以写成脚本来执行,将命令行写为文本文件保存
开头#!/bin/sh接下来是脚本内容,然后添加可执行权限chmod +x filename
脚本中可以使用变量,列表,环境变量,执行命令,执行表达式,使用test判断,使用管道,添加控制流程,定义函数,处理参数
脚本也可以用其他的解释语言来写,对于调用者来说是一致的

存在若干默认的启动脚本。


ed - text editor

ed通过相互的输入命令来编辑文本行
命令的格式是[address [,address]]command[parameters]
编辑显示存取文本都需要输入相应的命令来执行


sed - stream editor for filtering and transforming text

sed常和管道一起用在shell脚本中
其工作是以行为单位的,下面是一个文本替换的例子,也可打印删除什么的
sed -e 's/old/new/g' inputFileName > outputFileName
用;分号构成语句序列可以跳转,单行语句(包括块语句)前后构成条件关系,有剪切粘贴


awk - a pattern scanning and text processing language

常用的实现是mawk,debian里默认装的这个
命令的格式是pattern { action statements }
也可包含BEGIN块来设置行匹配的选项,或者print一些东西。
语法接近于c和sh,可用于将文本数据生成数据报告
作为单行命令行或者写成脚本都是可以的方式


其他

对于文本操作还用若干命令可以使用:
tee - read from standard input and write to standard output and files
cat - concatenate files and print on the standard output
grep - print lines matching a pattern
iconv - Convert encoding of given files from one encoding to another

ls可以用来在目录中查找文件,此外还有:
find - search for files in a directory hierarchy
locate - find files by name


链接

http://www.debian.org/doc/manuals/debian-reference/ch-program.zh-cn.html
http://en.wikipedia.org/wiki/Shell_script

没有评论: