Bourne Shell 及 shell 编程
介绍 Bourne Shell 基础及其他很多有用的特性shell编程及组织
主要内容
.shell 基础、基本介绍、环境选项、特殊字符
.shell 变量、用户定义变量、环境变量、位置变量(shell 参数)
.shell script 编程
条件测试、循环及重复控制
.shell定制
1.shell 基础知识
作者 Stephen Bourne 在Bell实验室开发,建议 mansh查看相关UNIX上的改进或特性
(1)shell 提示符及其环境
/etc/passwd 文件
提示符 $
/etc/profile $HOME/.profile
(2)shell 执行选项
-n 测试 shell script 语法结构 只读取 shell script 但不执行
-x 进入跟踪方式 显示所执行的每一条命令 用于调度
-a Tag all variables for export
-c "string" 从 strings 中读取命令
-e 非交互方式
-f 关闭 shell 文件名产生功能
1
-h locate and remember functions as defind
-i 交互方式
-k 从环境变量中读取命令的参数
-r 限制方式
-s 从标准输入读取命令
-t 执行命令后退出(shell exits)
-u 在替换中如使用未定义变量为错误
-v verbose,显示 shell 输入行
这些选项可以联合使用 但有些显然相互冲突 如-e和-i.
(3)受限制 shell(Restircted Shell)
sh -r 或 /bin/rsh
不能执行如下操作 cd, 更改 PATH,指定全路径名,输出重定向,因此可以提供一个较好的控制和安全机制通常 rsh用于应用型用户及拨号用户,这些用户通常是看不到提示符的,通常受限制用户的主目录是不可写的不足。如果用户可以调用 sh,则 rsh的限制将不在起作用,事实上如果用户在 vi及more程序中调用 shell,而这时rsh的限制将不再起作用。
(4)用 set 改变 shell 选项
用户可以在$提示符下用 set 命令来设置或取消 shell 的选项,使用-设置选项 +取消相应选项,大多数 UNIX 系统允许 a,e,f,h,k,n,u,v 和 x 的开关设置/取消set -xv启动跟踪方式;显示所有的命令及替换 同样显示输入set -tu,关闭在替换时对未定义变量的检查。使用 echo $-显示所有已设置的 shell 选项。
(5)用户启动文件 .profile
PATH=$PATH:/usr/loacl/bin; export PATH
(6)shell 环境变量
CDPATH 用于 cd 命令的查找路径
HOME /etc/passwd 文件中列出的用户主目录
IFS Internal Field Separator,默认为空格 tab 及换行符
2
MAIL /var/mail/$USERNAME mail 等程序使用
PATH
PS1 PS2 默认提示符($)及换行提示符(> )
TERM 终端类型 常用的有 vt100,ansi,vt200,xterm 等
示例 $PS1="test:";export PS1
test: PS1="\$";export PS1
$echo $MAIL
/var/mail/username
(7)保留字符及其含义
$ shell 变量名的开始 如$var
| 管道 将标准输出转到下一个命令的标准输入
# 注释开始
& 在后台执行一个进程
匹配一个字符
* 匹配 0 到多个字符(与 DOS 不同 可在文件名中间使用 并且含.)
$- 使用 set 及执行时传递给 shell 的标志位
$! 最后一个子进程的进程号
$# 传递给 shell script 的参数个数
$* 传递给 shell script 的参数
$@ 所有参数 个别的用双引号括起来
$? 上一个命令的返回代码
$0 当前 shell 的名字
$n (n:1-) 位置参数
$$ 进程标识号(Process Identifier Number, PID)
>file 输出重定向
<file 输入重定向
`command` 命令替换 如 filename=`basename /usr/local/bin/t
csh`
>>fiile 输出重定向 append
转义符及单引号
$echo "$HOME $PATH"
/home/hbwork /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6
/bin:
$echo '$HOME $PATH'
$HOME $PATH
$echo \$HOME $PATH
$HOME /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/h
ome/hbw
ork/bin
其他
$dir=ls
3
$$dir
$alias dir ls
$dir
ls > filelist
ls >> filelist
wc -l < filelist
wc -l filelist
sleep 5; echo 5 seconds reaches; ls -l
ps ax |egrep inetd
find / -name core -exec rm {} \; &
filename=`date "+%Y%m%d"`.log
上一篇:印度项目质量管理经验
下一篇:已经是最后一篇