没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1 shell 程序编写
1.1 *Shell 是什么?
任何发明都具有供用户使用的界面。 UNIX 供用户使用的界面就是 Shell(DOS 的
command 熟悉吧,但 UNIX 的要强大的多)。 Shell 为用户提供了输入命令和参数并可得到
命令执行结果的环境。
为 了 不 同 的 需 要 , UNIX 提 供 了 不 同 的 Shell 。 现 在 的 UNIX 大 部 分 都 支 持
BourneShell,以下教程就以 BourneShell(Bsh)为例,一步步的领略 UNIX Shell 的强大功能,
占先其强大魅力,达到更方便灵活的管理、应用 UNIX 的目的。
1.1.1 UNIX 内核和 Shell 的交互方法
启动 UNIX 时,程序 UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器
关 闭。 在引 导 过 程 中 , 程 序 init 将 进 入 后 台 运 行 一 直 到 机 器 关 闭 。 该 程 序 查 询 文
件/etc/inittab,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时,
init 程序调用 getty 程序在终端上显示 login 等登陆信息。(username 和 passwd),在输入密码
后, getty 调用 login 进程,该进程根据文件/etc/passwd 的内容来验证用户的身份。若用户
通过身份验证,login 进程 把用户的 home 目录设置成当前目录并把控制交给一系列 setup
程序。setup 程序可以是指定的应用程序,通常 setup 程序 为一个 Shell 程序,如:/bin/sh 即
Bourne Shell(command 出来了,呵呵)。
得到控制后,Shell 程序读取并执行文件/etc/.profile 以及.profile。这两个文件分别建立
了系统范围内的和 该用户自己的工作环境。最后 Shell 显示命令提示符,如$。(这是以 bsh
为例,若是 csh,为.cshrc,ksh 为.kshrc,bash 为.bashrc 等等)
注:(不妨把/etc/.profile 和.profile 看成 DOS 的 autoexec.bat 或 config.sys 文件)
当 shell 退出时,内核把控制交给 init 程序,该程序重新启动自动登陆过程。有两种方法
使 shell 退出,一是用户执行 exit 命令,二是 内核(例如 root 用 kill 命令)发出一个 kill 命令
结束 shell 进程。shell 退出后,内核回收用户及程序使用的资源。
用户登陆后,用户命令同计算机交互的关系为:命令进程--->Shell 程序--->UNIX 内核---
>计算机硬件。当用户输入一个命令,如$ls, Shell 将定位其可执行文件/bin/ls 并把其传递给
内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消 该
子进程并把控制交给其父进程,即 Shell 程序。例如执行:
$ps
该命令将会列出用户正在执行的进程,即 Shell 程序(下来详细说说,别急现在)和
ps 程序。若执行:
$sleep 10 &
$ps
其中第一条命令将产生一个在后台执行的 sleep 子进程。ps 命令执行时会显示出该子进
程。
每当用户执行一条命令时,就会产生一个子进程。该子进程的执行与其父进程或 Shell
完全无关,这样可以使 Shell 去做其他工作。(Shell 只是把用户的意图告诉内核,然后该干
嘛干嘛:)) 现在 windows 有个计划任务(在固定的时间,日期自动执行某任务),其实 UNIX 很
早就有这个功能了,也就是所谓的 Shell 的自动执行。一些 UNIX 资源,如 cron 可以自动
执行 Shell 程序而无需用户的参与,(这个功能好象在/var/spool/crotab 目录里)。 Crontab 程
序对于系统管理员来说是非常有用的。Cron 服务用于计划程序在特定时间(月、日、周、
时 、 分 ) 运 行 。 我 们 以 root 的 crontab 为 例 。 根 用 户 的 crontab 文 件 放 在
/var/spool/crontab/root 中,其格式如下:
(1) (2) (3) (4) (5) (6)
0 0 * * 3 /usr/bin/updatedb
1. 分钟 (0-60)
2. 小时 (0-23)
3. 日 (1-31)
4. 月 (1-12)
5. 星期 (1-7)
6. 所要运行的程序
2.Shell 的功能和特点
1>命令行解释
2>使用保留字
3>使用 Shell 元字符(通配符)
4>可处理程序命令
5>使用输入输出重定向和管道
6>维护一些变量
7>运行环境控制
8>支持 Shell 编程
对于"命令行解释"就不多说了,就是在 shell 提示符(例如:"$","%","#"等)后输入一行
unix 命令,Shell 将接收用户的输入。
"使用保留字":Shell 有一些具有特殊意义的字,例如在 Shell 脚本中,do,done,for 等字
用来控制循环操作,if,then 等控制条件操作。 保留字随 Shell 环境的不同而不同。
"通配符":* 匹配任何位置
? 匹配单个字符
[] 匹配的字符范围或列表 例如:
$ls [a-c]*
将列出以 a-c 范围内字符开头的所有文件
$ls [a,m,t]*
将列出以 e,m 或 t 开头的所有文件
"程序命令" :当用户输入命令后,Shell 读取环境变量$path(一般在用户自己的.profile
中设置),该变量包含了命令可执行文件可能存在的目录列表。 shell 从这些目录中寻找命
令所对应的可执行文件,然后将该文件送给内核执行。
"输入输出重定向及管道" :重定向的功能同 DOS 的重定向功能:
">" 重定向输出
"<" 重定向输入
而管道符号,是 unix 功能强大的一个地方,符号是一条竖线:"|",用法: command 1 |
command 2 他的功能是把第一个命令 command 1 执行的结果作为 command 2 的输入传给
command 2,例如:
$ls -s|sort -nr|pg
该命令列出当前目录中的所有文件,并把输出送给 sort 命令作为输入,sort 命令按数
字递减的顺序把 ls 的输出排序。然后把排序后的 内容传送给 pg 命令,pg 命令在显示器上
显示 sort 命令排序后的内容。
"维护变量" :Shell 可以维护一些变量。变量中存放一些数据供以后使用。用户可以
用"="给变量赋值,如:
$lookup=/usr/mydir
该命令建立一个名为 lookup 的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用
lookup 来代替/usr/mydir,例如:
$echo $lookup
结果显示:/usr/mydir
为了使变量能被子进程使用,可用 exprot 命令,例如:
$lookup=/usr/mydir
$export lookup
"运行环境控制" :当用户登陆启动 shell 后,shell 要为用户创建一个工作的环境,如下:
1>当 login 程序激活用户 shell 后,将为用户建立环境变量。从/etc/profile 和.profile 文件
中读出,在这些文件中一般都用$TERM 变量设置终端类型,用$PATH 变量设置 Shell 寻找
可执行文件的路径。
2>从/etc/passwd 文件或命令行启动 shell 时,用户可以给 shell 程序指定一些参数,例
如"-x",可以在命令执行前显示该命令及其参数。后面详细介绍这些参数。
"shell 编程" :本文主要介绍的内容。
shell 本身也是一种语言(*可以先理解为 unix 命令的组合,加上类 C 的条件,循环等程
序控制语句,类似 dos 批处理,但要强大的多),用户可以 通过 shell 编程(脚本,文本文件),完
成特定的工作。
1.2 SHELL 变量
下面我们详细的介绍 Bourne Shell 的编程:
自从贝尔实验室设计了 Bourne Shell。从那时起许多厂商根据不同的硬件平台设计了许
多版本得 unix。但在众多版本的 unix 中,Bourne Shell 一直保持一致。
1.2.1 Bsh 的启动:
用户在登陆后,系统根据文件/etc/passwd 中有关该用户的信息项启动 Shell。例如某用
户在 passwd 中 的信息项为:
ice_walk:!:411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh
则表明,用户名是 ice_walk 等信息,在最后一项"/bin/bsh"表明用户的 sh 环境类型是
bsh,于是系统启动之。在启动或执行(包括下面我们要讲 的 shell 程序--脚本)过程中可以使
用以下一些参数,我们一一说明:
-a 将所有变量输出
-c "string"从 string 中读取命令
-e 使用非交互式模式
-f 禁止 shell 文件名产生
-h 定义
-i 交互式模式
-k 为命令的执行设置选项
-n 读取命令但不执行
-r 受限模式
-s 命令从标准输入读取
-t 执行一命令,然后退出 shell
-u 在替换时,使用未设置的变量将会出错
-v 显示 shell 的输入行
-x 跟踪模式,显示执行的命令
许多模式可以组合起来用,您可以试试了,但-ei 好象不行,你说 why 呢?
使用 set 可以设置或取消 shell 的选项来改变 shell 环境。打开选项用"-",关闭选项用"+",
多数 unix 允许打开或关闭 a、f、e、h、k、n、 u、v 和 x 选项。若显示 Shell 中已经设置的
选项,执行:
$echo $-
Bsh 中每个用户的 home 目录下都有一个.profile 文件,可以修改该文件来修改 shell 环
境。为了增加一个可执行文件的路径(例如/ice_walk/bin), 可以把下面代码加入.profile 中
PATH=$PATH:/ice_walk/bin;exprot PATH
.profile 中 shell 的环境变量意思如下:
CDPATH 执行 cd 命令时使用的搜索路径
HOME 用户的 home 目录
IFS 内部的域分割符,一般为空格符、制表符、或换行符
MAIL 指定特定文件(信箱)的路径,有 UNIX 邮件系统使用
PATH 寻找命令的搜索路径(同 dos 的 config.sys 的 path)
PS1 主命令提示符,默认是"$"
PS2 从命令提示符,默认是">"
TERM 使用终端类型
1.2.2 Bsh 里特殊字符及其含义
在 Bsh 中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、
数据或程序控制以及引用和逃逸字符控制。他们 可以让用户在 Shell 中使用最少的代码完
剩余37页未读,继续阅读
资源评论
HelloWorld_dongjie
- 粉丝: 33
- 资源: 31
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功