Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104644879
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-28 21:30:57

 
文章来源from altmayer.dhs.org
  权声明:
  本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行任何商业性或赢利性活动。转载时请保留本版权声明。
  作者:何斌武,hbwork@dlut.edu.cn,大连理工大学网络中心
  /********抱歉,为了格式不乱,我就用代码模式粘贴了*********/
  源码:--------------------------------------------------------------------------------
  ------------------------------------------------------------------------------
  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
   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 输出重定向
      `command` 命令替换,如 filename=`basename /usr/local/bin/tcsh`
   >>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将为其设置一个新的环境让其执行
阅读(373) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~