Shell脚本编程之(一)Shell脚本简介
什么是Shell脚本
shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的
shell script 可以简单的被看成是批处理文件, 也可以被说成是一个程序语言,且这个程序语言由于都是利用 shell 与相关工具指令, 所以不需要编译即可执行
我为什么要学Shell脚本
自动化
当然Shell脚本的功能有很多,目前对我而言就是为了减少手动操作的的次数
编写Shell脚本注意事项
- 指令的执行时从上到下、从左到右的分析与执行
- 指令、选项与参数间的多个空白都会被忽略掉
- 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空格键
- 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令
- 至于如果一行的内容太多,则可以使用『 [Enter] 』来延伸至下一行
- 『 # 』可做为批注!任何加在 # 后面的资料将全部被视为批注文字而被忽略
如何执行一个脚本文件
比如在/home/rivers/目录下有一个shell.sh脚本文件
(1)绝对路径
使用 /home/rivers/shell.sh 来下达指令
(2)相对路径
假设工作目录在 /home/rivers/ ,则使用 ./shell.sh 来执行
(3)变量『PATH』功能
把shell.sh放在 PATH 指定的目录内,例如: ~/bin/
通过 bash shell.sh或sh shell.sh来执行
Shell脚本的Hello World
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2018/12/22 Rivers 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
上面代码格式是《鸟哥Linux私房菜》建议的一种写Shell脚本的格式
代码格式解释
因为我们使用的是 bash ,所以,必须要以『 #!/bin/bash 』来宣告这个文件内的语法使用bash 的语法!
那么当这个程序被执行时,他就能够加载 bash 的相关环境配置文件 (一般来说就是 non-login shell 的~/.bashrc), 并且执行 bash 来使我们底下的指令能够执行!这很重要的!(在很多状况中,如果没有设定好这一行, 那么该程序很可能会无法执行,因为系统可能无法判断该程序需要使用什么 shell 来执行啊!)
整个 script 当中,除了第一行的『 #! 』是用来宣告 shell 的之外,其他的 # 都是『批注』用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的基本数据。一般来说, 建议你一定要养成说明该script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 创建日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!
建议务必要将一些重要的环境变量设定好,鸟哥个人认为, PATH 与 LANG (如果有使用到输出相关的信息时) 是当中最重要的! 如此一来,则可让我们这支程序在进行时,可以直接下达一些外部指令,而不必
写绝对路径呢!比较方便啦!
就将主要的程序写好即可!在这个例子当中,就是 echo 那一行啦!
利用 exit 这个指令来让程序中断,并且回传一个数值给系统。 在我们这个例子当中,使用 exit 0 ,这代表离开 script 并且回传一个 0 给系统, 所以执行完这个 script 后,若接着下达 echo $? 则可得到0 的值喔! 利用这个 exit n (n 是数字) 的功能,我们还可以自定义错误讯息, 让这支程序变得更加的 smart 呢!
执行结果
[[email protected] bin]# sh hello.sh
Hello World!
可以看到我们使用的是第二种bash的方式执行的脚本,也可以使用直接命令的方式:
[[email protected] bin]# ./hello.sh
-bash: ./hello.sh: Permission denied
纳尼?无法执行的原因写的很明显,没有权限,而我们在上面总结的时候特意强调,使用直接下达命令执行脚本,必须得给这个脚本增加可执行权限
[[email protected] bin]# chmod a+x hello.sh ; ./hello.sh
Hello World!
建议
- 撰写 script 的工具最好使用 vim 而不是 vi ,因为 vim 会有额外的语法检验机制,能够
在第一阶段撰写时就发现语法方面的问题 - 按照上面的格式,养成一个良好的编写脚本格式的习惯
上一篇: python的常用模块之collections模块
下一篇: re模块