第一支 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 的呢!
------------------------------------------------------------