0340bashshell-scripts.htm
来自「鸟哥LINUX 学习课本」· HTM 代码 · 共 1,372 行 · 第 1/5 页
HTM
1,372 行
<blockquote>刚刚的『 if then fi 』的形式是以程序来自行判断,那么<b>如果我已经规划好几个项目要来执行,只要选择执行的『种类方式』就可以正确的执行的话</b>,要怎么做呢?最简单的例子就是我们常常使用到的/etc/rc.d/init.d/ 里头的 scripts 啰!例如:重新启动 xinetd 是使用:<blockquote><b><font color="#000066" face="SimSun">/etc/rc.d/init.d/xinetdrestart</font></b></blockquote>注意啰!那个是 restart 的项目,然后 script 就会自动的去搜寻 restart 项目里面的情况去执行!<b><font color="#000099">那个就是case ... esac</font></b> 的使用模式啰!有没有注意到,开始是『 case 』结束则是使用case 的倒写『 esac 』喝!很有趣吧!那么这种格式是怎样呢?<br> <table bgcolor="#000000" border="1" cols="1" width="800"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff"><b>case</b>种类方式(string) <b>in</b>         </font><font color="#ffff00"><==开始阶段,那个种类方式可分成两种类型,通常使用 $1 这一种直接下达类型!</font></font><br><font size="-1" color="#ffffff" face="SimSun">   种类方式一)</font><br><font size="-1" color="#ffffff" face="SimSun">      程序执行段</font><br><font size="-1" face="SimSun"><font color="#ffffff">      ;;                    </font><font color="#ffff00"><==种类方式一的结束符号!</font></font><br><font size="-1" color="#ffffff" face="SimSun">   种类方式二)</font><br><font size="-1" color="#ffffff" face="SimSun">      程序执行段</font><br><font size="-1" color="#ffffff" face="SimSun">      ;;</font><br><font size="-1" color="#ffffff" face="SimSun">   *)</font><br><font size="-1" face="SimSun"><font color="#ffffff">      echo "Usage: {种类方式一|种类方式二}"    </font><font color="#ffff00"><==列出可以利用的参数值!</font></font><br><font size="-1" color="#ffffff" face="SimSun">      exit 1</font><br><font size="-1" face="SimSun"><font color="#ffffff"><b>esa</b>c                        </font><font color="#ffff00"><==这个 case 的设定结束处!</font></font></td></tr></tbody></table><p>在种类方式(string)的格式主要有两种:</p><ol><li><font color="#3333ff">直接下达式</font>:就是以『 <font color="#3333ff">执行档案+ string</font> 』的方式来执行的(/etc/rc.d/init.d 里头的基本设定方式),则string 可以直接写成『 $1 』(在执行档案后面直接加入参数的第一个参数!)</li><li><font color="#3333ff">交互式</font>:就是由屏幕输出可能的项目,然后让使用者输入,这个通常必须配合『read variable 』然后 string 则写成『 $variable 』的格式!</li></ol>同样的,我们建立一个名为 test2.sh 的档案来试做看看。假如我们共可分三段格式来进行实作,分别为one, two, three ,并假设使用直接下达式,则可以写成:<br> <table bgcolor="#000000" border="1" cols="1" width="700"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">vi test09-case.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">#!/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun"># program:     Using case mode</font><br><font size="-1" color="#ffffff" face="SimSun"># Made by:     VBird</font><br><font size="-1" color="#ffffff" face="SimSun"># date:        2002/05/20</font><br><font size="-1" color="#ffffff" face="SimSun"># content:     I will use this program to study the case mode!</font><br><font size="-1" color="#ffffff" face="SimSun"># 1. printthis program</font><br><font size="-1" color="#ffffff" face="SimSun">  echo"This program will print your selection!"</font><p><font size="-1" face="SimSun"><font color="#ffffff">case $1 in                                  </font><font color="#ff9900"><==使用直接下达指令型态!</font></font><br><font size="-1" color="#ffffff" face="SimSun">  one)</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "your choice is one"</font><br><font size="-1" color="#ffffff" face="SimSun">       ;;</font><br><font size="-1" color="#ffffff" face="SimSun">  two)</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "your choice is two"</font><br><font size="-1" color="#ffffff" face="SimSun">       ;;</font><br><font size="-1" color="#ffffff" face="SimSun">  three)</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "your choice is three"</font><br><font size="-1" color="#ffffff" face="SimSun">       ;;</font><br><font size="-1" color="#ffffff" face="SimSun">  *)</font><br><font size="-1" face="SimSun"><font color="#ffffff">       echo "Usage {one|two|three}"     </font><font color="#ff9900"> <==列出可以使用的参数(如果使用者下达错误的参数时)</font></font><br><font size="-1" color="#ffffff" face="SimSun">       exit 1</font><br><font size="-1" color="#ffffff" face="SimSun">esac</font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">sh test09-case.sh </font><font color="#ffffff">     </font><font color="#ff9900"><==执行结果!显示没有相对的参数!所以列出可以参数!</font></font><br><font size="-1" color="#ffffff" face="SimSun">This programwill print your selection!</font><br><font size="-1" color="#ffffff" face="SimSun">Usage {one|two|three}</font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">sh test09-case.sh three</font></font><br><font size="-1" color="#ffffff" face="SimSun">This programwill print your selection!</font><br><font size="-1" color="#ffffff" face="SimSun">your choiceis three</font></p></td></tr></tbody></table><p>那么对谈式的 case 又如何呢?嗯!我们利用上面的方式来修改一下内容啰!<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]# </font><font color="#ffff00">vi test10-case.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">#!/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun"># program:     Using case mode</font><br><font size="-1" color="#ffffff" face="SimSun"># Made by:     VBird</font><br><font size="-1" color="#ffffff" face="SimSun"># date:        2002/06/27</font><br><font size="-1" color="#ffffff" face="SimSun"># content:     I will use this program to study the case mode!</font><br><font size="-1" color="#ffffff" face="SimSun"># 1. printthis program</font><br><font size="-1" color="#ffffff" face="SimSun">echo "Pressyour select one, two, three"</font><br><font size="-1" color="#ffffff" face="SimSun">read number</font><p><font size="-1" color="#ffffff" face="SimSun">case $numberin</font><br><font size="-1" color="#ffffff" face="SimSun">  one)</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "your choice is one"</font><br><font size="-1" color="#ffffff" face="SimSun">       ;;</font><br><font size="-1" color="#ffffff" face="SimSun">  two)</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "your choice is two"</font><br><font size="-1" color="#ffffff" face="SimSun">       ;;</font><br><font size="-1" color="#ffffff" face="SimSun">  three)</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "your choice is three"</font><br><font size="-1" color="#ffffff" face="SimSun">       ;;</font><br><font size="-1" color="#ffffff" face="SimSun">  *)</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "Usage {one|two|three}"</font><br><font size="-1" color="#ffffff" face="SimSun">       exit 1</font><br><font size="-1" color="#ffffff" face="SimSun">esac</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]#</font><font color="#ffff00"> sh test10-case.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">Press yourselect one, two, three</font><br><font size="-1" face="SimSun"><font color="#ffffff">two  </font><font color="#ff9900"><=这一行是您输入的呦!</font></font><br><font size="-1" color="#ffffff" face="SimSun">your choiceis two</font></p></td></tr></tbody></table></p><p>如何!很简单吧!以后对于 /etc/rc.d/init.d/ 里头的 script 就应该看的懂了吧!此外,由于还有所谓的『<font color="#3333ff">函数(function)</font>』也就是『先将需要执行的程序段写成一个小区块,而这个小区块则以一个名称来取代之』,简单的方式可以请您参考一下您系统中的/etc/rc.d/init.d/sendmail !注意看一下 start() 底下的那些个咚咚!你就可以知道什么意思了!由于我们这里并不教你如何写程序(基本上,scripts 就是小程序啦!还好! VBird 以前就有程序的底子!不然还真怕 script呢!),所以就只好点到为止啰!</p></blockquote><hr width="100%"><a name="cycle"></a><font color="#000099"><font size="+1">循环:</font>for....do....done,while...do...done, until...do...done,</font><blockquote>在程序段当中,最常使用到的就是循环了!循环是很重要的一项工具,尤其是具有判断形式的循环,很常被使用来判断一些事项的可行性与否!但是程序怎么知道什么时候应该要停止这个程序呢?呵呵!就需要加入判断啰!好了,最简单的判断式可以是底下几种:<ul><li><font face="SimSun"><b>for</b> <b>((</b> 条件一; 条件二; 条件三 <b>))</b></font></li><li><font face="SimSun"><b>for</b> variable <b>in</b> variable1 variable2 .....</font></li><li><font face="SimSun"><b>while</b> <b>[</b> condition1 <b>]</b> &&{ || } [ condition2 ] ...</font></li><li><font face="SimSun"><b>until</b> <b>[</b> condition1 <b>]</b> &&{ || } [ condition2 ] ...</font></li></ul>for 是已经知道有多少个 run 了,即是已经知道要跑几次了,至于 until 与 while则分别是:<ul><li>『<b><font color="#3333ff">until:直到条件相同的时候才离开程序</font></b>』;</li><li>『<b><font color="#3333ff">while:当条件相同的时候,就继续做!</font></b>』</li></ul>这两者不太相同的啦!</blockquote><blockquote>好了!我们先来谈一下最简单的循环,就是利用 for 这个东西来进行!好了,假设我们计算1 + 2 + 3 .... + 100 ,以 script 要如何写呢?有很多的方式,我们来谈一谈do...done 好了!<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">vi test11-loop.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">#!/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun"># Using forand loop</font><br><font size="-1" color="#ffffff" face="SimSun"># VBird 2002/06/27</font><br><font size="-1" face="SimSun"><font color="#ffffff">declare -is  </font><font color="#ff9900"># <==变量宣告</font></font><br><font size="-1" color="#ffffff" face="SimSun">for (( i=1;i<=100; i=i+1 ))</font><br><font size="-1" color="#ffffff" face="SimSun">do</font><br><font size="-1" color="#ffffff" face="SimSun">       s=s+i</font><br><font size="-1" color="#ffffff" face="SimSun">done</font><br><font size="-1" color="#ffffff" face="SimSun">echo "The countis ==> $s"</font><p><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]#</font><font color="#ffff00"> sh test11-loop.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">The count is==> 5050</font></p></td></tr></tbody></table><p>请注意!<b><font color="#000099" face="SimSun"> for (( 条件一;条件二; 条件三))</font></b> 这是必须要的!</p><ul><li>条件一:这可以看成是『初始值』,如上面的例子中,初始值是 i=1 啦!</li><li>条件二:这可以看成是『符合值』,如上面的例子中,当 i<=100 的时候都是符合条件的!</li><li>条件三:这可以看成是『步阶』!也就是说, i 每次都加一!</li></ul><font face="SimSun">所以啦!上面的例子是说:由 i=1 开始到 i<= 100 ,每次i 都加一来执行底下的程序段(就是 s=s+i ),当 i >100 (也就是 i=101 )就跳出这一段程序段</font>!怎样!不难吧!</blockquote><blockquote>好了!那么使用 while 或者是 until 要怎样执行呢?其实都是差不多的情况!我们使用底下的两个script 来进行 1 ~ 100 的累加动作!<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" color="#ffffcc" face="SimSun">1. 使用 while:</font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">vi test12-loop.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">#!/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun"># Using whileand loop</font><br><font size="-1" color="#ffffff" face="SimSun"># VBird 2002/06/27</font><br><font size="-1" color="#ffffff" face="SimSun">declare -ii</font><br><font size="-1" color="#ffffff" face="SimSun">declare -is</font><br><font size="-1" color="#ffffff" face="SimSun">while [ "$i"!= "101" ]</font><br><font size="-1" color="#ffffff" face="SimSun">do</font><br><font size="-1" color="#ffffff" face="SimSun">       s=s+i</font><br><font size="-1" color="#ffffff" face="SimSun">       i=i+1</font><br><font size="-1" color="#ffffff" face="SimSun">done</font><br><font size="-1" color="#ffffff" face="SimSun">echo "The countis ==> $s"</font><p><font size="-1" color="#ffffcc" face="SimSun">2. 使用 until:</font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">vi test13-loop.sh<
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?