龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

Bourne Shell及shell编程(1)

时间:2011-03-20 22:37来源:未知 作者:admin 点击:
分享到:
权声明: 本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行任何商业性或赢利性活动。转载时请保留本版权声明。 作者:何斌武,hbwork@dlut.edu.cn,大连理

  权声明:

  本文内容为大连理工大学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 输出重定向

   >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将为其设置一个新的环境让其执行,这称

精彩图集

赞助商链接