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
|
相关阅读 更多 +
排行榜 更多 +