Linux的Shell Script学习

什么是 Shell scripts ?

shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文字文件,将一些 shell 的语法与指令写在里面, 搭配正规表示法、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。shell script 更提供数组、循环、条件与逻辑判断等重要功能,让使用者也可以直接以 shell 来撰写程序,而不必使用类似 C 程序语言等传统程序撰写的语法呢!shell script 可以简单的被看成是批次档, 也可以被说成是一个程序语言,且这个程序语言由于都是利用 shell 与相关工具指令, 所以不需要编译即可执行,且拥有不错的除错 (debug) 工具,所以,他可以帮助系统管理员快速的管理好主机。


在 shell script 的撰写同样需要用到这些注意事项的:

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


如此一来,我们在 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

[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 \n"
exit 0

我主要将整个程序的撰写分成数段,大致是这样:

1. 第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称: 因为我们使用的是 bash ,所以,必须要以『 #!/bin/bash 』来宣告这个档案内的语法使用 bash 的语法!那么当这个程序被执行时,他就能够加载 bash 的相关环境设定档, 并且执行 bash 来使我们底下的指令能够执行!这很重要的!(在很多状况中,如果没有设定好这一行, 那么该程序很可能会无法执行,因为系统可能无法判断该程序需要使用什么 shell 来执行啊!)
2. 程序内容的宣告: 整个 script 当中,除了第一行的 #! 是用来宣告 shell 的之外,其它的 # 都是『批注』用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的状态。一般来说, 建议您一定要养成说明该 script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 建檔日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!
3. 主要环境变量的宣告: 建议务必要将一些重要的环境变量设定好,鸟哥个人认为, PATH 是当中最重要的! 如此一来,则可让我们这支程序在进行时,可以直接下达指令, 而不必写绝对路径呢!比较好啦!
4. 主要程序部分 就将主要的程序写好即可!在这个例子当中,就是 echo 那一行啦!
5. 执行成果告知 是否记得我们在 bash 里面要讨论一个指令的执行成功与否,可以使用 $? 这个变量来观察~ 那么我们也可以利用 exit 这个指令来让程序中断,并且回传一个数值给系统。 在我们这个例子当中,我使用 exit 0 ,这代表离开 script ,并且回传一个 0 给系统, 所以我执行完这个 script
后,若接着下达 echo $? 则可得到 0 的值喔! 更聪明的读者应该也知道了,呵呵!利用这个 exit n 的功能,我们还可以自订错误讯息, 让这支程序变得更加的 smart 呢!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值