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$
本文内容为大连理工大学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 输出重定向
$$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$
Bourne Shell及shell编程 1
Bourne Shell及shell编程 2
Bourne Shell及shell编程 4
Shell、脚本、编程和编译 1
Shell编程资源
shell 1
Shell编程基础 - Ubuntu中文
Eclipse编程之旅:Shell入门
shell编程范例之字符串操作 - wuye_chinaunix
Linux Shell
Shell 知识点
shell命令
Shell Script
shell diff
Linux Shell常用shell命令
IBM-awk学习资料[一] - shell编程 - Linuxer William_zx...
CSDN技术中心 Linux Shell编程学习笔记
Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
【Linux Shell简介】
快速编辑 Shell 命令行
Shell Script初體驗
Shell 設計入門 -- 臥龍小三
SHELL 十三问
Shell 条件判断总结