Bourne Shell及shell编程 1

来源:百度文库 编辑:神马文学网 时间:2024/06/09 08:52:20
版权信息 作者Altmayer.bbs@altmayer.dhs.org 文章出处黄嘴企鹅论坛 javalee转贴 文档制作拒绝正版 作者声明
本文内容为大连理工大学LINUX选修课讲义欢迎大家转载但禁止使用本材料进行
任何商业性或赢利性活动转载时请保留本版权声明
作者何斌武hbwork@dlut.edu.cn,大连理工大学网络中心April 1999.
URL: ftp://ftp.dlut.edu.cn/pub/PEOPLE/albin/
源码: ------------------------------------------------------------------------------ Bourne Shell  介绍Bourne Shell 基础及其他很多有用的特性shell编程及组织  主要内容 .shell基础 基本介绍环境选项特殊字符 .shell变量 用户定义变量环境变量位置变量(shell 参数) .shell script编程  条件测试循环及重复控制 .shell定制  1.shell基础知识  作者Stephen Bourne 在Bell实验室开发  建议man sh 查看相关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文件名产生功能
 -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及换行符
 MAIL /var/mail/$USERNAME mail等程序使用  PATH  PS1PS2 默认提示符($)及换行提示符(> )  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 输出重定向  >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:/home/hbw ork/bin   其他  $dir=ls
 $$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  2. shell变量   变量代表某些值的符号如$HOME,cd命令查找$HOME,在计算机语言
中可以使用变量可以  进行多种运算和控制   Bourne Shell有如下四种变量  .用户自定义变量  .位置变量即 shell script之参数  .预定义变量特殊变量  .环境变量(参考shell定制部分)  (1)用户自定义变量数据的存储  $ COUNT=1  $ NAME="He Binwu"   技巧因为大部分UNIX命令使用小写字符因此在shell编程中通常
使用全大写变量  当然这并不是强制性的但使用大写字符可以在编程中方便地识别
变量   变量的调用在变量前加$  $ echo $HOME  /home/hbwork  $ WEEK=Satur  $ echo Today is $WEEKday  Today is  $echo Today is ${WEEK}day  Today is Saturday   Shell变量赋值从右从左进行(Linux Shell/bash从左向右赋值!)  $ X=$Y Y=y  $ echo $X
 y  $ Z=z Y=$Z  $ echo $Y   $   使用unset命令删除变量的赋值  $ Z=hello  $ echo $Z  hello  $ unset Z  $ echo $Z   $   有条件的命令替换  在Bourne Shell中可以使变量替换在特定条件下执行即有条件
的环境变量替换  这种变量替换总是用大括号括起来的   .设置变量的默认值  在变量未赋值之前其值为空Bourne Shell允许对变量设置
默认值其格式如 下  ${variable:-defaultvalue}  例  $ echo Hello $UNAME  Hello  $ echo Hello ${UNAME:-there}  Hello there  $ echo $UNAME #变量值并未发生变化   $ UNAME=hbwork  $ echo Hello ${UNAME:-there}  Hello hbwork  $  .另一种情况改变变量的值格式如下  ${variable:=value}   例  $ echo Hello $UNAME  Hello  $ echo Hello ${UNAME:=there}  Hello there
 $ echo $UNAME #变量值并未发生变化  there  $  .变量替换中使用命令替换  $USERDIR=${$MYDIR:-`pwd`}   .在变量已赋值时进行替换 ${variable:+value}  .带有错误检查的有条件变量替换  ${variable:?value}  例  $ UNAME=  $ echo ${UNAME:?"UNAME has not been set"}  UNAME: UNAME has not been set  $ echo ${UNAME:?}  UNAME: parameter null or not set   (2)位置变量(Shell参数)  在shell script中位置参数可用$1..$9表示$0表示内容通常为当前执行
程序的文件名  .防止变量值被替换 readonly variable  .使用export命令输出变量使得变量对子shell可用当shell执行一下
程序时shell  将为其设置一个新的环境让其执行这称之了subshell. 在Bourne Shell中变量通常  被认为是本地变量也就是说在对其赋值之外的shell环境之外是不认识
此变量的使  用export对subshell可用   例对变量PS1的export操作shell的提示符将发生变化  $ PS1=`hostname`$  peony$sh  $ echo $PS1  $ <-输出结果  $ exit  peony$export PS1  peony$sh  peony$ echo $PS1  peony$ <-输出结果  peony$