欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-10 08:22:19
...

什么是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 呢!

执行结果

[[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 会有额外的语法检验机制,能够
    在第一阶段撰写时就发现语法方面的问题
  • 按照上面的格式,养成一个良好的编写脚本格式的习惯