Shell脚本编程之(一)Shell脚本简介

什么是Shell脚本

shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的

shell script 可以简单的被看成是批处理文件, 也可以被说成是一个程序语言,且这个程序语言由于都是利用 shell 与相关工具指令, 所以不需要编译即可执行

我为什么要学Shell脚本

自动化

当然Shell脚本的功能有很多,目前对我而言就是为了减少手动操作的的次数

编写Shell脚本注意事项

  1. 指令的执行时从上到下、从左到右的分析与执行
  2. 指令、选项与参数间的多个空白都会被忽略掉
  3. 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空格键
  4. 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令
  5. 至于如果一行的内容太多,则可以使用『 [Enter] 』来延伸至下一行
  6. 『 # 』可做为批注!任何加在 # 后面的资料将全部被视为批注文字而被忽略

如何执行一个脚本文件

比如在/home/rivers/目录下有一个shell.sh脚本文件

  • 直接下达命令

(1)绝对路径
使用 /home/rivers/shell.sh 来下达指令
(2)相对路径
假设工作目录在 /home/rivers/ ,则使用 ./shell.sh 来执行
(3)变量『PATH』功能
把shell.sh放在 PATH 指定的目录内,例如: ~/bin/

  1. 以 bash 程序来执行

通过 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脚本的格式

代码格式解释

  • 第一行 #!/bin/bash 在宣告这个 script 使用的 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 呢!

执行结果

[root@node01 bin]# sh hello.sh 
Hello World!

可以看到我们使用的是第二种bash的方式执行的脚本,也可以使用直接命令的方式:

[root@node01 bin]# ./hello.sh
-bash: ./hello.sh: Permission denied

纳尼?无法执行的原因写的很明显,没有权限,而我们在上面总结的时候特意强调,使用直接下达命令执行脚本,必须得给这个脚本增加可执行权限

[root@node01 bin]# chmod a+x hello.sh ; ./hello.sh
Hello World! 

建议

  • 撰写 script 的工具最好使用 vim 而不是 vi ,因为 vim 会有额外的语法检验机制,能够
    在第一阶段撰写时就发现语法方面的问题
  • 按照上面的格式,养成一个良好的编写脚本格式的习惯

猜你喜欢

转载自blog.csdn.net/Android_xue/article/details/85215104