鸟哥Linux私房菜之学习Shell Scripts(1)

发表于:2009-11-26 10:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  第一支 script 的撰写与执行

  如同前面讲到的, shell script 其实就是纯文字文件 (ASCII) ,我们可以编辑这个档案, 然后让这个档案来帮我们一次执行多个指令,或者是利用一些运算与逻辑判断来帮我们达成某些功能。 所以啦,要编辑这个档案的内容时,当然就需要具备有 bash shell 指令下达的相关认识。 我们说过,要下达指令需要注意的事项在 bash 章节内已经提过, 在 shell script 的撰写同样需要用到这些注意事项的:

  • 如同前面 bash command 提到的,指令与参数间的多个空白会被忽略掉;
  • 而空白行也将被忽略掉!,并且 [tab] 也是不会被理会的!
  • 如果读取到一个 Enter 符号 ( CR )),就尝试开始执行该行命令;
  • 至于如果一行的内容太多,则可以使用 [Enter] 来延伸至下一行;
  • 此外,使用最多的 # 可做为批注!任何加在 # 后面的字,将全部被视为批注文字而被忽略!

  如此一来,我们在 script 内所撰写的程序,就会被一行一行的执行。好了,那么这个程序假设文件名是 shell.sh 好了,如何执行这个档案?很简单,可以有底下几个方法:

  将 shell.sh 加上可读与执行 (rx) 的权限,然后就能够以 ./shell.sh 来执行了;

  直接以 sh shell.sh 的方式来直接执行即可。

  反正重点就是要让那个 shell.sh 内的指令可以被执行的意思啦!咦!那我为何需要使用 ./shell.sh 来下达指令? 还记得我们在 bash 里面一直强调的,指令是否能够被执行与 PATH 这个环境变量有关, 所以,要执行『目前这个目录下的某个档案』就需要加上 ./ 这个目录啦!另外,其实您也可以将 shell.sh 放在您家目录下的 ~/bin 这个目录中,然后利用 PATH="$PATH":~/bin 的设定, 嘿嘿,就能够直接执行您的 script 啰~ ^_^

  那,为何 sh shell.sh 也可以执行呢?这是因为 /bin/sh 其实就是 /bin/bash , 使用 sh shell.sh 亦即告诉系统,我想要直接以 bash 的功能来执行 shell.sh 这个档案内的相关指令的意思。 而我们也可以利用 sh 的参数,如 -n 及 -x 来检查与追踪 shell.sh 的语法是否正确呢! ^_^

  撰写第一支 script

  不论是那个门派,要学武功要从扫地做起,那么要学程序呢?呵呵,肯定是由『秀出 Hello World!』 这个字眼开始的!OK!那么鸟哥就先写一支 script 给大家瞧一瞧:

  [root@linux ~]# mkdir scripts; cd scripts
  [root@linux scripts]# vi sh01.sh
  #!/bin/bash
  # Program:
  # This program is used to show "Hello World !" in screen.
  # History:
  # 2005/08/23        VBird        First release
  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  export PATH
  echo -e "Hello World ! a "
  exit 0

  在我们这个章节当中,请将所有的撰写的 script 放置到您家目录的 ~/scripts 这个目录内, 比较好管理啦!上面的写法当中,我主要将整个程序的撰写分成数段,大致是这样:

  第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称:

  因为我们使用的是 bash ,所以,必须要以『 #!/bin/bash 』来宣告这个档案内的语法使用 bash 的语法!那么当这个程序被执行时,他就能够加载 bash 的相关环境设定档, 并且执行 bash 来使我们底下的指令能够执行!这很重要的!(在很多状况中,如果没有设定好这一行, 那么该程序很可能会无法执行,因为系统可能无法判断该程序需要使用什么 shell 来执行啊!)

  程序内容的宣告:

  整个 script 当中,除了第一行的 #! 是用来宣告 shell 的之外,其它的 # 都是『批注』用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的状态。一般来说, 建议您一定要养成说明该 script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 建档日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!

  主要环境变量的宣告:

  建议务必要将一些重要的环境变量设定好,鸟哥个人认为, PATH 是当中最重要的! 如此一来,则可让我们这支程序在进行时,可以直接下达指令, 而不必写绝对路径呢!比较好啦!

  主要程序部分

  就将主要的程序写好即可!在这个例子当中,就是 echo 那一行啦!

  执行成果告知

  是否记得我们在 bash 里面要讨论一个指令的执行成功与否,可以使用 $? 这个变量来观察~ 那么我们也可以利用 exit 这个指令来让程序中断,并且回传一个数值给系统。 在我们这个例子当中,我使用 exit 0 ,这代表离开 script ,并且回传一个 0 给系统, 所以我执行完这个 script 后,若接着下达 echo $? 则可得到 0 的值喔! 更聪明的读者应该也知道了,呵呵!利用这个 exit n 的功能,我们还可以自订错误讯息, 让这支程序变得更加的 smart 呢!

  接下来执行看看结果是怎样吧?

  [root@linux scripts]# sh sh01.sh

  Hello World !

  您会看到屏幕是这样,而且应该还会听到『咚』的一声,为什么呢?还记得前一章提到的 printf 吧?用 echo 接着那些特殊的按键也可以发生同样的事情~ 不过, echo 必须要加上 -e 的参数才行! 呵呵!在您写完这个小 script 之后,您就可以大声的说:『我也会写程序了』!哈哈! 很简单有趣吧~ ^_^

  另外,你也可以利用:『chmod a+x sh01.sh; ./sh01.sh』来执行这个 script 的呢!

  ------------------------------------------------------------

42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号