文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[转载]Bourne Shell及shell编程

[转载]Bourne Shell及shell编程

时间:2005-11-26  来源:ghostzhu



版权声明:
本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行
任何商业性或赢利性活动。转载时请保留本版权声明。

作者:何斌武,[email protected],大连理工大学网络中心,April 1999.

[请点击阅读全文]

                 ——by ghostzhu

作者:何斌武,[email protected],大连理工大学网络中心,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上的改进或特性

在shell脚本中,#!/bin/bash是必须要放在首行的!
他的作用是告诉内核用哪种shell来解释你编写的脚本!

(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        输出重定向
   <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/h
bw
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

相关阅读 更多 +
排行榜 更多 +
飙车地下城市赛车

飙车地下城市赛车

赛车竞速 下载
爬坡摩托

爬坡摩托

赛车竞速 下载
超速前进赛车传奇

超速前进赛车传奇

赛车竞速 下载