⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 447.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<A href="type4.html" tppabs="http://www.linuxhero.com/docs/type4.html">shell</A>                 | <A href="copyright.html" tppabs="http://www.linuxhero.com/docs/copyright.html">版权说明</A></font></DIV>
            </TD>
          <TD><IMG height=22 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1 
        border=0></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=10 cellPadding=0 width="100%" bgColor=#ffffff 
        border=0>
         <TR>
          <TD>
            <TABLE cellSpacing=0 cellPadding=3 width="100%" border=0>
              
              <TR>
                <TD vAlign=top align=middle width="60%">
                  <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                  background="images/back.gif" tppabs="http://www.linuxhero.com/docs/images/back.gif" border=0>
                    <TBODY>
                    <TR>
                        <TD vAlign=top width="80%"> 
                          <DIV align=center>
                        <FORM action="search.html" tppabs="http://www.linuxhero.com/docs/search.html" method=get>
                            </FORM>
                        <TABLE cellSpacing=0 cellPadding=0 width="95%" 
                          border=0><TBODY>
                          <TR>
                            <TD background="images/bgi.gif" tppabs="http://www.linuxhero.com/docs/images/bgi.gif" 
                          height=30></TD></TR></TBODY></TABLE>
                        <TABLE cellSpacing=0 cellPadding=3 width="95%" 
                        align=center border=0>
                          <TBODY>
                          <TR>
                            <TD>
                              <TABLE cellSpacing=0 cellPadding=3 width="100%" 
                              border=0>
                                <TBODY>
                                <TR>
                                      <TD vAlign=top> 
<p><FONT class=normalfont><B><font color=blue>Unix系列shell程序编写</font></B></FONT><BR><FONT class=smallfont color=#ff9900>2004-04-23 15:18 pm</FONT><BR><FONT class=normalfont>作者:作者<br>来自:Linux知识宝库<br>联系方式:无名<br><br>Unix系列shell程序编写(上)<br>
 <br>
*Shell是什么?<br>
  任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。<br>
<br>
  为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。<br>
<br>
  1.UNIX内核和Shell的交互方法<br>
<br>
  启动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出来了,呵呵)。<br>
<br>
  得到控制后,Shell程序读取并执行文件/etc/.profile以及.profile。这两个文件分别建立了系统范围内的和 该用户自己的工作环境。最后Shell显示命令提示符,如$。(这是以bsh为例,若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等)    <br>
<br>
  注:(不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或 config.sys文件)<br>
<br>
  当shell退出时,内核把控制交给init程序,该程序重新启动自动登陆过程。有两种方法使shell退出,一是用户执行exit命令,二是 内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后,内核回收用户及程序使用的资源。<br>
<br>
  用户登陆后,用户命令同计算机交互的关系为:命令进程---&gt;Shell程序---&gt;UNIX内核---&gt;计算机硬件。当用户输入一个命令,如$ls, Shell将定位其可执行文件/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消 该子进程并把控制交给其父进程,即Shell程序。例如执行:<br>
<br>
    $ps<br>
<br>
    该命令将会列出用户正在执行的进程,即Shell程序(下来详细说说,别急现在)和ps程序。若执行:<br>
<br>
    $sleep 10 &<br>
    $ps<br>
<br>
  其中第一条命令将产生一个在后台执行的sleep子进程。ps命令执行时会显示出该子进程。<br>
<br>
  每当用户执行一条命令时,就会产生一个子进程。该子进程的执行与其父进程或Shell完全无关,这样可以使Shell去做其他工作。(Shell只是把用户的意图告诉内核,然后该干嘛干嘛:)) 现在windows有个计划任务(在固定的时间,日期自动执行某任务),其实UNIX很早就有这个功能了,也就是所谓的Shell的自动执行。一些UNIX 资源,如cron可以自动执行Shell程序而无需用户的参与,(这个功能好象在/var/spool/crotab目录里)。 Crontab 程序对于系统管理员来说是非常有用的。Cron 服务用于计划程序在特定时间(月、日、周、时、分)运行。我们以root的crontab 为例。根用户的 crontab 文件放在 /var/spool/crontab/root 中,其格式如下:<br>
<br>
  (1)  (2)  (3)  (4)  (5)  (6)<br>
   0   0   *   *   3   /usr/bin/updatedb<br>
      1. 分钟 (0-60)<br>
      2. 小时 (0-23)<br>
      3. 日 (1-31)<br>
      4. 月 (1-12)<br>
      5. 星期 (1-7)<br>
      6. 所要运行的程序<br>
  2.Shell的功能和特点<br>
  1&gt;命令行解释<br>
  2&gt;使用保留字<br>
  3&gt;使用Shell元字符(通配符)<br>
  4&gt;可处理程序命令<br>
  5&gt;使用输入输出重定向和管道<br>
  6&gt;维护一些变量<br>
  7&gt;运行环境控制<br>
  8&gt;支持Shell编程<br>
<br>
  对于"命令行解释"就不多说了,就是在shell提示符(例如:"$","%","#"等)后输入一行unix命令,Shell将接收用户的输入。<br>
<br>
  "使用保留字":Shell有一些具有特殊意义的字,例如在Shell脚本中,do,done,for等字用来控制循环操作,if,then等控制条件操作。 保留字随Shell环境的不同而不同。<br>
<br>
  "通配符":* 匹配任何位置<br>
       ? 匹配单个字符<br>
       [] 匹配的字符范围或列表 例如:<br>
       <br>
          $ls [a-c]*<br>
         <br>
          将列出以a-c范围内字符开头的所有文件<br>
          $ls [a,m,t]*<br>
         将列出以e,m或t开头的所有文件<br>
<br>
  "程序命令" :当用户输入命令后,Shell读取环境变量$path(一般在用户自己的.profile中设置),该变量包含了命令可执行文件可能存在的目录列表。 shell从这些目录中寻找命令所对应的可执行文件,然后将该文件送给内核执行。<br>
<br>
  "输入输出重定向及管道" :重定向的功能同DOS的重定向功能:<br>
<br>
     "&gt;" 重定向输出<br>
     "&lt;" 重定向输入<br>
<br>
  而管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2,例如:<br>
<br>
    $ls -s|sort -nr|pg<br>
<br>
  该命令列出当前目录中的所有文件,并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。然后把排序后的 内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。<br>
<br>
  "维护变量" :Shell可以维护一些变量。变量中存放一些数据供以后使用。用户可以用"="给变量赋值,如:<br>
<br>
         $lookup=/usr/mydir<br>
<br>
该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用lookup来代替/usr/mydir,例如:          <br>
         $echo $lookup<br>
         结果显示:/usr/mydir<br>
<br>
         为了使变量能被子进程使用,可用exprot命令,例如:<br>
<br>
         $lookup=/usr/mydir<br>
         $export lookup<br>
<br>
  "运行环境控制" :当用户登陆启动shell后,shell要为用户创建一个工作的环境,如下:<br>
<br>
  1&gt;当login程序激活用户shell后,将为用户建立环境变量。从/etc/profile和.profile文件中读出,在这些文件中一般都用$TERM 变量设置终端类型,用$PATH变量设置Shell寻找可执行文件的路径。<br>
<br>
  2&gt;从/etc/passwd文件或命令行启动shell时,用户可以给shell程序指定一些参数,例如"-x",可以在命令执行前显示该命令及其参数。后面详细介绍这些参数。<br>
<br>
  "shell编程" :本文主要介绍的内容。<br>
<br>
  shell本身也是一种语言(*可以先理解为unix命令的组合,加上类C的条件,循环等程序控制语句,类似dos批处理,但要强大的多),用户可以 通过shell编程(脚本,文本文件),完成特定的工作。<br>
<br>
SHELL变量<br>
<br>
  下面我们详细的介绍Bourne Shell的编程:<br>
<br>
  自从贝尔实验室设计了Bourne Shell。从那时起许多厂商根据不同的硬件平台设计了许多版本得unix。但在众多版本的unix中,Bourne Shell 一直保持一致。<br>
  1&gt;Bsh的启动:用户在登陆后,系统根据文件/etc/passwd中有关该用户的信息项启动Shell。例如某用户在passwd中 的信息项为:<br>
<br>
    ice_walk:!:411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh<br>
<br>
  则表明,用户名是ice_walk等信息,在最后一项"/bin/bsh"表明用户的sh环境类型是bsh,于是系统启动之。在启动或执行(包括下面我们要讲 的shell程序--脚本)过程中可以使用以下一些参数,我们一一说明:<br>
<br>
  -a 将所有变量输出<br>
  -c "string"从string中读取命令<br>
  -e 使用非交互式模式<br>
  -f 禁止shell文件名产生<br>
  -h 定义<br>
  -i 交互式模式<br>
  -k 为命令的执行设置选项<br>
  -n 读取命令但不执行<br>
  -r 受限模式<br>
  -s 命令从标准输入读取<br>
  -t 执行一命令,然后退出shell<br>
  -u 在替换时,使用未设置的变量将会出错<br>
  -v 显示shell的输入行<br>
  -x 跟踪模式,显示执行的命令<br>
许多模式可以组合起来用,您可以试试了,但-ei好象不行,你说why呢?<br>
<br>
  使用set可以设置或取消shell的选项来改变shell环境。打开选项用"-",关闭选项用"+",多数unix允许打开或关闭a、f、e、h、k、n、 u、v和x选项。若显示Shell中已经设置的选项,执行:<br>
<br>
    $echo $-<br>
<br>
  Bsh中每个用户的home目录下都有一个.profile文件,可以修改该文件来修改shell环境。为了增加一个可执行文件的路径(例如/ice_walk/bin), 可以把下面代码加入.profile中<br>
<br>
    PATH=$PATH:/ice_walk/bin;exprot PATH<br>
<br>
   .profile中shell的环境变量意思如下:<br>
<br>
    CDPATH 执行cd命令时使用的搜索路径<br>
    HOME 用户的home目录<br>
    IFS 内部的域分割符,一般为空格符、制表符、或换行符<br>
    MAIL 指定特定文件(信箱)的路径,有UNIX邮件系统使用<br>
    PATH 寻找命令的搜索路径(同dos的config.sys的 path)<br>
    PS1 主命令提示符,默认是"$"<br>
    PS2 从命令提示符,默认是"&gt;"<br>
    TERM 使用终端类型<br>
<br>
  2&gt;Bsh里特殊字符及其含义<br>
<br>
  在Bsh中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、数据或程序控制以及引用和逃逸字符控制。他们 可以让用户在Shell中使用最少的代码完成复杂的任务。<br>
<br>
     *&gt; Shell变量名使用的特殊字符<br>
        $# 传送给命令Shell的参数序号<br>
        $- 在Shell启动或使用set命令时提供选项<br>
        $? 上一条命令执行后返回的值<br>
        $$ 当前shell的进程号<br>
        $! 上一个子进程的进程号<br>
        $@ 所有的参数,每个都用双括号括起<br>
        $* 所有参数,用双括号括起<br>
        $n 位置参数值,n表示位置<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -