|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
[ 作者: Linux联盟收集 加入时间:2006-06-28 22:35:53 来自:Linux联盟收集
] | |
|
Bourne Shell qZMLinux联盟 qZMLinux联盟 介绍:Bourne Shell 基础及其他很多有用的特性,shell编程及组织。 qZMLinux联盟 qZMLinux联盟 主要内容: qZMLinux联盟 .shell基础 基本介绍,环境,选项,特殊字符 qZMLinux联盟 .shell变量 用户定义变量,环境变量,位置变量(shell 参数) qZMLinux联盟 .shell script编程 qZMLinux联盟 条件测试,循环及重复控制 qZMLinux联盟 .shell定制 qZMLinux联盟 qZMLinux联盟 1.shell基础知识 qZMLinux联盟 作者:Stephen Bourne 在Bell实验室开发 qZMLinux联盟 建议:man sh 查看相关UNIX上的改进或特性 qZMLinux联盟 qZMLinux联盟 (1)shell提示符及其环境 qZMLinux联盟 /etc/passwd文件 qZMLinux联盟 提示符:$ qZMLinux联盟 /etc/profile $HOME/.profile qZMLinux联盟 (2)shell执行选项 qZMLinux联盟 -n 测试shell script语法结构,只读取shell script但不执行 qZMLinux联盟 -x 进入跟踪方式,显示所执行的每一条命令,用于调度 qZMLinux联盟 -a Tag all variables for export qZMLinux联盟 -c "string" 从strings中读取命令 qZMLinux联盟 -e 非交互方式 qZMLinux联盟 -f 关闭shell文件名产生功能 qZMLinux联盟 -h locate and remember functions as defind qZMLinux联盟 -i 交互方式 qZMLinux联盟 -k 从环境变量中读取命令的参数 qZMLinux联盟 -r 限制方式 qZMLinux联盟 -s 从标准输入读取命令 qZMLinux联盟 -t 执行命令后退出(shell exits) qZMLinux联盟 -u 在替换中如使用未定义变量为错误 qZMLinux联盟 -v verbose,显示shell输入行 qZMLinux联盟 qZMLinux联盟 这些选项可以联合使用,但有些显然相互冲突,如-e和-i. qZMLinux联盟 qZMLinux联盟 (3)受限制shell(Restircted Shell) qZMLinux联盟 sh -r 或 /bin/rsh qZMLinux联盟 qZMLinux联盟 不能执行如下操作:cd, 更改PATH,指定全路径名,输出重定向,因此可以提供一个较 qZMLinux联盟 好的控制和安全机制。通常rsh用于应用型用户及拨号用户,这些用户通常是看不到提 qZMLinux联盟 示符的。通常受限制用户的主目录是不可写的。 qZMLinux联盟 qZMLinux联盟 不足:如果用户可以调用sh,则rsh的限制将不在起作用,事实上如果用户在vi及more qZMLinux联盟 程序中调用shell,而这时rsh的限制将不再起作用。 qZMLinux联盟 qZMLinux联盟 (4)用set改变 shell选项 qZMLinux联盟 用户可以在$提示符下用set命令来设置或取消shell的选项。使用-设置选项,+取消相应 qZMLinux联盟 选项,大多数UNIX系统允许a,e,f,h,k,n,u,v和x的开关设置/取消。 qZMLinux联盟 qZMLinux联盟 set -xv qZMLinux联盟 启动跟踪方式;显示所有的命令及替换,同样显示输入。 qZMLinux联盟 set -tu qZMLinux联盟 关闭在替换时对未定义变量的检查。 qZMLinux联盟 qZMLinux联盟 使用echo $-显示所有已设置的shell选项。 qZMLinux联盟 qZMLinux联盟 qZMLinux联盟 (5)用户启动文件 .profile qZMLinux联盟 PATH=$PATH:/usr/loacl/bin; export PATH qZMLinux联盟 qZMLinux联盟 (6)shell环境变量 qZMLinux联盟 CDPATH 用于cd命令的查找路径 qZMLinux联盟 HOME /etc/passwd文件中列出的用户主目录 qZMLinux联盟 IFS Internal Field Separator,默认为空格,tab及换行符 qZMLinux联盟 MAIL /var/mail/$USERNAME mail等程序使用 qZMLinux联盟 PATH qZMLinux联盟 PS1,PS2 默认提示符($)及换行提示符(>) qZMLinux联盟 TERM 终端类型,常用的有vt100,ansi,vt200,xterm等 qZMLinux联盟 qZMLinux联盟 示例:$PS1="test:";export PS1 qZMLinux联盟 test: PS1="$";export PS1 qZMLinux联盟 $echo $MAIL qZMLinux联盟 /var/mail/username qZMLinux联盟 (7)保留字符及其含义 qZMLinux联盟 $ shell变量名的开始,如$var qZMLinux联盟 | 管道,将标准输出转到下一个命令的标准输入 qZMLinux联盟 # 注释开始 qZMLinux联盟 & 在后台执行一个进程 qZMLinux联盟 ? 匹配一个字符 qZMLinux联盟 * 匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.) qZMLinux联盟 $- 使用set及执行时传递给shell的标志位 qZMLinux联盟 $! 最后一个子进程的进程号 qZMLinux联盟 $# 传递给shell script的参数个数 qZMLinux联盟 $* 传递给shell script的参数 qZMLinux联盟 $@ 所有参数,个别的用双引号括起来 qZMLinux联盟 $? 上一个命令的返回代码 qZMLinux联盟 $0 当前shell的名字 qZMLinux联盟 $n (n:1-) 位置参数 qZMLinux联盟 $$ 进程标识号(Process Identifier Number, PID) qZMLinux联盟 >file 输出重定向 qZMLinux联盟 <file 输入重定向 qZMLinux联盟 `command` 命令替换,如 filename=`basename /usr/local/bin/tcsh` qZMLinux联盟 >>fiile 输出重定向,append qZMLinux联盟 qZMLinux联盟 转义符及单引号: qZMLinux联盟 $echo "$HOME $PATH" qZMLinux联盟 /home/hbwork /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: qZMLinux联盟 $echo '$HOME $PATH' qZMLinux联盟 $HOME $PATH qZMLinux联盟 $echo $HOME $PATH qZMLinux联盟 $HOME /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/hbw qZMLinux联盟 ork/bin qZMLinux联盟 qZMLinux联盟 其他: qZMLinux联盟 $dir=ls qZMLinux联盟 $$dir qZMLinux联盟 $alias dir ls qZMLinux联盟 $dir qZMLinux联盟 qZMLinux联盟 ls > filelist qZMLinux联盟 ls >> filelist qZMLinux联盟 wc -l < filelist qZMLinux联盟 wc -l filelist qZMLinux联盟 sleep 5; echo 5 seconds reaches; ls -l qZMLinux联盟 ps ax |egrep inetd qZMLinux联盟 find / -name core -exec rm {} ; & qZMLinux联盟 filename=`date "+%Y%m%d"`.log qZMLinux联盟 qZMLinux联盟 2. shell变量 qZMLinux联盟 变量:代表某些值的符号,如$HOME,cd命令查找$HOME,在计算机语言中可以使用变量可以 qZMLinux联盟 进行多种运算和控制。 qZMLinux联盟 qZMLinux联盟 Bourne Shell有如下四种变量: qZMLinux联盟 .用户自定义变量 qZMLinux联盟 .位置变量即 shell script之参数 qZMLinux联盟 .预定义变量(特殊变量) qZMLinux联盟 .环境变量(参考shell定制部分) qZMLinux联盟 (1)用户自定义变量(数据的存储) qZMLinux联盟 $ COUNT=1 qZMLinux联盟 $ NAME="He Binwu" qZMLinux联盟 qZMLinux联盟 技巧:因为大部分UNIX命令使用小写字符,因此在shell编程中通常使用全大写变量, qZMLinux联盟 当然这并不是强制性的,但使用大写字符可以在编程中方便地识别变量。 qZMLinux联盟 qZMLinux联盟 变量的调用:在变量前加$ qZMLinux联盟 $ echo $HOME qZMLinux联盟 /home/hbwork qZMLinux联盟 $ WEEK=Satur qZMLinux联盟 $ echo Today is $WEEKday qZMLinux联盟 Today is qZMLinux联盟 $echo Today is ${WEEK}day qZMLinux联盟 Today is Saturday qZMLinux联盟 qZMLinux联盟 Shell变量赋值从右从左进行(Linux Shell/bash从左向右赋值!) qZMLinux联盟 $ X=$Y Y=y qZMLinux联盟 $ echo $X qZMLinux联盟 y qZMLinux联盟 $ Z=z Y=$Z qZMLinux联盟 $ echo $Y qZMLinux联盟 qZMLinux联盟 $ qZMLinux联盟 qZMLinux联盟 使用unset命令删除变量的赋值 qZMLinux联盟 $ Z=hello qZMLinux联盟 $ echo $Z qZMLinux联盟 hello qZMLinux联盟 $ unset Z qZMLinux联盟 $ echo $Z qZMLinux联盟 qZMLinux联盟 $ qZMLinux联盟 qZMLinux联盟 有条件的命令替换 qZMLinux联盟 在Bourne Shell中可以使变量替换在特定条件下执行,即有条件的环境变量替换。 qZMLinux联盟 这种变量替换总是用大括号括起来的。 qZMLinux联盟 qZMLinux联盟 .设置变量的默认值 qZMLinux联盟 在变量未赋值之前其值为空。Bourne Shell允许对变量设置默认值,其格式如 qZMLinux联盟 下: qZMLinux联盟 ${variable:-defaultvalue} qZMLinux联盟 例: qZMLinux联盟 $ echo Hello $UNAME qZMLinux联盟 Hello Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|
|
|
|
|