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

📄 linux的shell编程(下).htm

📁 Linux Shell 编程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
      string 
      in&nbsp;<BR>exp-1)<BR>若干个命令行1<BR>;;<BR>exp-2)<BR>若干个命令行2<BR>;;<BR>……<BR>*)<BR>其他命令行<BR>esac&nbsp;<BR>shell通过计算字符串string的值,将其结果依次和表达式exp-1、exp-2等进行比较,直到找到一个匹配的表达式为止,如果找到了匹配项则执行它下面的命令直到遇到一对分号(;;)为止。<BR>在case表达式中也可以使用shell的通配符(“*”、“?”、“[ 
      ]”)。通常用“*”作为case命令的最后表达式以便使在前面找不到任何相应的匹配项时执行“其他命令行”的命令。<BR>6.无条件控制语句break和continue<BR>break 
      用于立即终止当前循环的执行,而contiune用于不执行循环中后面的语句而立即开始下一个循环的执行。这两个语句只有放在do和done之间才有效。<BR>7.函数定义<BR>在shell中还可以定义函数。函数实际上也是由若干条shell命令组成的,因此它与shell程序形式上是相似的,不同的是它不是一个单独的进程,而是shell程序的一部分。函数定义的基本格式为:<BR>functionname<BR>{<BR>若干命令行<BR>}<BR>调用函数的格式为:<BR>functionname 
      param1 param2 
      ……<BR>shell函数可以完成某些例行的工作,而且还可以有自己的退出状态,因此函数也可以作为if、while等控制结构的条件。<BR>在函数定义时不用带参数说明,但在调用函数时可以带有参数,此时shell将把这些参数分别赋予相应的位置参数$1、$2、...及$*。<BR>8.命令分组<BR>在shell中有两种命令分组的方法:“()”和“{}”,前者当shell执行()中的命令时将再创建一个新的子进程,然后这个子进程去执行圆括弧中的命令。当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰;{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。当我们要真正使用圆括弧和花括弧时(如计算表达式的优先级),则需要在其前面加上转义符(\)以便让shell知道它们不是用于命令执行的控制所用。<BR>9.信号<BR>trap命令用于在shell程序中捕捉到信号,之后可以有三种反应方式:<BR>(1)执行一段程序来处理这一信号<BR>(2)接受信号的默认操作<BR>(3)忽视这一信号<BR>trap对上面三种方式提供了三种基本形式:<BR>第一种形式的trap命令在shell接收到signal 
      list清单中数值相同的信号时,将执行双引号中的命令串。<BR>trap 'commands' signal-list<BR>trap 
      "commands" signal-list<BR>为了恢复信号的默认操作,使用第二种形式的trap命令:<BR>trap 
      signal-list<BR>第三种形式的trap命令允许忽视信号:<BR>trap " " 
      signal-list<BR>注意:<BR>(1)对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储。<BR>(2)在trap中可以定义对信号0的处理(实际上没有这个信号),shell程序在其终止(如执行exit语句)时发出该信号。<BR>(3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样将很容易导致shell程序无法终止。<BR>另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体的值来替换。<BR><BR>五、运行shell程序的方法<BR>用户可以用任何编辑程序来编写shell程序。因为shell程序是解释执行的,所以不需要编译装配成目标程序,按照shell编程的惯例,以bash为例,程序的第一行一般为“#!/bin/bash”,其中#表示该行是注释,叹号“!”告诉shell运行叹号之后的命令并用文件的其余部分作为输入,也就是运行/bin/bash并让/bin/bash去执行shell程序的内容。<BR>执行shell程序的方法有三种:<BR>(1)sh 
      shell程序文件名<BR>这种方法的命令格式为:<BR>bash 
      shell程序文件名<BR>这实际上是调用一个新的bash命令解释程序,而把shell程序文件名作为参数传递给它。新启动的shell将去读指定的文件,执行文件中列出的命令,当所有的命令都执行完结束。该方法的优点是可以利用shell调试功能。<BR>(2)sh&lt;shell程序文件名<BR>格式为:<BR>bash&lt;shell 
      程序文件名<BR>这种方式就是利用输入重定向,使shell命令解释程序的输入取自指定的程序文件。<BR>(3)用chmod命令使shell程序成为可执行的<BR>一个文件能否运行取决于该文件的内容本身可执行且该文件具有执行权。对于shell程序,当用编辑器生成一个文件时,系统赋予的许可权限都是644(rw-r-r--),因此,当用户需要运行这个文件时,只需要直接键入文件名即可。<BR>在这三种运行shell程序的方法中,最好按下面的方式选择:当刚建立一个shell程序,对它的正确性还没有把握时,应当使用第一种方式进行调试。当一个shell程序已经调试好时,应使用第三种方式把它固定下来,以后只要键入相应的文件名即可,并可被另一个程序所调用。<BR><BR>六、bash程序的调试<BR>在编程过程中难免会出错,有的时候,调试程序比编写程序花费的时间还要多,shell程序同样如此。<BR>shell程序的调试主要是利用bash命令解释程序的选择项。调用bash的形式是:<BR>bash 
      -选择项 
      shell程序文件名<BR>几个常用的选择项是:<BR>-e:如果一个命令失败就立即退出<BR>-n:读入命令但是不执行它们<BR>-u:置换时把未设置的变量看作出错<BR>-v:当读入shell输入行时把它们显示出来<BR>-x:执行命令时把命令和它们的参数显示出来<BR>上面的所有选项也可以在shell程序内部用“set 
      -选择项”的形式引用,而“set 
      +选择项”则将禁止该选择项起作用。如果只想对程序的某一部分使用某些选择项时,则可以将该部分用上面两个语句包围起来。<BR>1.未置变量退出和立即退出<BR>未置变量退出特性允许用户对所有变量进行检查,如果引用了一个未赋值的变量就终止shell程序的执行。shell通常允许未置变量的使用,在这种情况下,变量的值为空。如果设置了未置变量退出选择项,则一旦使用了未置变量就显示错误信息,并终止程序的运行。未置变量退出选择项为“-u”。<BR>当shell运行时,若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时,如果未经重新定向,该出错信息会打印在终端屏幕上,而shell程序仍将继续执行。要想在错误发生时迫使shell程序立即结束,可以使用“-e”选项将shell程序的执行立即终止。<BR>2.shell程序的跟踪<BR>调试shell程序的主要方法是利用shell命令解释程序的“-v”或“-x”选项来跟踪程序的执行。“-v”选择项使shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而“-x”选择项使shell在执行程序的过程中把它执行的每一个命令在行首用一个“+”加上命令名显示出来。并把每一个变量和该变量所取的值也显示出来,因此,它们的主要区别在于:在执行命令行之前无“-v”则打印出命令行的原始内容,而有“-v”则打印出经过替换后的命令行的内容。<BR>除了使用shell的“-v”和“-x”选择项以外,还可以在shell程序内部采取一些辅助调试的措施。例如,可以在shell程序的一些关键地方使用echo命令把必要的信息显示出来,它的作用相当于C语言中的printf语句,这样就可以知道程序运行到什么地方及程序目前的状态。<BR><BR>七、bash的内部命令<BR>bash命令解释程序包含了一些内部命令。内部命令在目录列表时是看不见的,它们由shell本身提供。常用的内部命令有:echo、eval、exec、export、readonly、read、shift、wait和点(.)。下面简单介绍其命令格式和功能。<BR>1.echo<BR>命令格式:echo 
      arg<BR>功能:在屏幕上打印出由arg指定的字符串。<BR>2.eval<BR>命令格式:eval 
      args<BR>功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行。<BR>3.exec<BR>命令格式:exec 
      命令 
      命令参数<BR>功能:当shell执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程,也就是最初的shell就终止了,所以shell程序中exec后面的语句将不再被执行。<BR>4.export<BR>命令格式:export 
      变量名 或:export 
      变量名=变量值<BR>功能:shell可以用export把它的变量向下带入子shell从而让子进程继承父进程中的环境变量。但子shell不能用export把它的变量向上带入父shell。<BR>注意:不带任何变量名的export语句将显示出当前所有的export变量。<BR>5.readonly<BR>命令格式:readonly 
      变量名<BR>功能:将一个用户定义的shell变量标识为不可变的。不带任何参数的readonly命令将显示出所有只读的shell变量。<BR>6.read<BR>命令格式:<BR>read变量名表<BR>功能:从标准输入设备读入一行,分解成若干字,赋值给shell程序内部定义的变量。<BR>7.shift语句<BR>功能:shift语句按如下方式重新命名所有的位置参数变量:$2成为$1,$3成为$2……在程序中每使用一次shift语句,都使所有的位置参数依次向左移动一个位置,并使位置参数“$#”减一,直到减到0。<BR>8.wait<BR>功能:是shell等待在后台启动的所有子进程结束。Wait的返回值总是真。<BR>9.exit<BR>功能:退出shell程序。在exit之后可有选择地指定一个数字作为返回状态。<BR>10.“.”(点)<BR>命令格式:. 
      Shell程序文件名<BR>功能:使shell读入指定的shell程序文件并依次执行文件中的所有语句。<BR></SPAN></P></TD></TR></TBODY></TABLE></CENTER></DIV><!--webbot bot="Include" U-Include="../../moban3.html" TAG="BODY" startspan -->
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=780>
  <TBODY>
  <TR>
    <TD bgColor=#000000 vAlign=top width="100%">
      <P align=center><SPAN class=search><FONT color=#ffffff>| <A 
      href="http://www.swm.com.cn/">本站首页</A> | <A 
      href="http://www.swm.com.cn/rj/index.html">软件世界电子版</A> | <A 
      href="http://www.swm.com.cn/pcwalker/index.html" 
      target=_blank>PC任我行电子版</A> | <A href="http://shop.swm.com.cn/" 
      target=_blank>网乐福超市</A> | <A href="http://www.swm.com.cn/download" 
      target=_blank>下载天地</A> | <A href="http://www.swm.com.cn/school/index.html" 
      target=_blank>电脑网校</A> | 热门卫星站 | <A 
      href="mailto:webmaster@swm.com.cn">Email</A> |</FONT></SPAN></P></TD></TR>
  <TR>
    <TD width="100%">
      <P align=center><SPAN class=search><FONT 
      color=#000080><BR>电话:(010)63955811-14 传真:(010)63955884 <A 
      href="mailto:网站管理:webmaster@swm.com.cn"></A></FONT><A 
      href="mailto:网站管理:webmaster@swm.com.cn"><FONT 
      color=#000080>网站管理:webmaster@swm.com.cn</FONT></A><FONT color=#000080> 
      广告电话:(010)63951658/9 广告垂询:</FONT><A href="mailto:lhb@swm.com.cn"><FONT 
      color=#000080>lhb@swm.com.cn<BR></FONT></A><FONT 
      color=#000080><BR>@Copyright 1999 版权所有,《软件世界》杂志社。All Right 
      Reserved.</FONT></SPAN> </P></TD></TR></TBODY></TABLE></CENTER></DIV><!--webbot bot="Include" endspan i-checksum="1118" --></BODY></HTML>

⌨️ 快捷键说明

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