文章详情

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

Bourne Shell及shell编程

时间:2009-03-23  来源:sjhf

Bourne Shell及shell编程
作者: 何斌武 ([email protected],大连理工大学网络中心,April 1999.)
修改: shark巨菜(原文较老,经实践后加入了部分注释)

介绍: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 defined(找到并记住所定义的功能)
-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选项。Fedora9默认是himBH

(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、linux等。

示例:
$PS1="test:";export PS1     测试失败。
test: PS1="\$";export PS1   测试失败。
#echo $MAIL
/var/mail/username
(7)保留字符及其含义
$ 是shell变量名的开始,如$var。
| 管道,将标准输出转到下一个命令的标准输入。
# 注释开始,root登陆提示符。
& 在后台执行一个进程。
? 匹配一个字符。
* 匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含。) 
$- 使用set及执行时传递给shell的标志位。
$! 最后一个子进程的进程号。
$! 执行上一个背景指令的PID。--网上的信息
$# 传递给shell script的参数个数。
$# 这个程序的参数个数。--网上的信息
$* 传递给shell script的参数。
$* 这个程序的所有参数。--网上的信息
$@ 所有参数,个别的用双引号括起来。
$* 以"参数1 参数2 ... " 形式保存所有参数。--网上的信息
$@ 以"参数1" "参数2" ... 形式保存所有参数。--网上的信息
$? 上一个命令的返回值 (0则表示成立;1表示不成立)
$0 当前shell的名字。
$0 这个程序的执行名字。--网上的信息
$n (n:1-) 位置参数。
$n 这个程序的第n个参数值,n=1...9。--网上的信息
$$ 进程PID、这个程序的PID。

转义符及单引号:
#echo "$HOME $PATH"
/home/user /usr/local/bin:/bin:/usr/bin:/root/bin

#echo '$HOME $PATH'
$HOME $PATH 

#echo \$HOME $PATH 
$HOME /usr/local/bin:/bin:/usr/bin:/root/bin

重定向:
重定向:>   追加的方式重定向:>>    标准输入:0 标准输出:1 标准错误输出:2
#echo 1> filename       重定向标准输出到“filename”。
#echo 1>> filename      追加的方式重定向标准输出到“filename”。
#la 2> filename     重定向标准错误输出到“filename”,如果命令正确还会显示在标准输出上。
#la &> filename #la > filename 2>&1 重定向正确和错误的信息到“filename”。
#la > /dev/null 2>&1    这种情况会使正确和错误的信息都输出到null里面,就不会有任何返回信息。

其他:
#sleep 5; echo 5 seconds reaches    (5秒延迟后显示5秒延迟)
#filename=`date +%Y%m%d`.log        注意:`是1左边的按钮,不是单引号。

2. shell变量
变量:代表某些值的符号,如$HOME。cd命令查找$HOME,在计算机语言中可以使用变量可以进行多种运算和控制。
Bourne Shell有如下四种变量:
l  预定义变量(特殊变量)
l
相关阅读 更多 +
排行榜 更多 +
rento大富翁手游

rento大富翁手游

休闲益智 下载
冲撞赛车3无限金币版

冲撞赛车3无限金币版

赛车竞速 下载
电动火车模拟器内置菜单

电动火车模拟器内置菜单

赛车竞速 下载