没有合适的资源?快使用搜索试试~ 我知道了~
shell编程学习 本文档是公司培训的教材,可以参考一下.
资源详情
资源评论
资源推荐
Bourne Shell 及 shell 编程
版权信息
作者
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 文件名产生功能
1
-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 及换行符
2
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 输出重定向
<file 输入重定向
`command` 命令替换
如 filename=`basename /usr/local/bin/t
csh`
>>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:/h
ome/hbw
ork/bin
其他
$dir=ls
3
$$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
4
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
5
剩余30页未读,继续阅读
致追风
- 粉丝: 2
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0