Linux系统学习 shell script

项目导入


   如果想要管理好主机,一定要好好学习shell script。Shell script有点像是早期的批处理,即将一些命令汇总起来一次运行。但是shell script拥有更强大的功能,那就是它可以进行类似程序(program)的撰写,并且不需要经过编译(compile)就能够运行,非常方便。同时,我们还可以通过 shell script 来简化日常的工作管理。在整个Linux的环境中,一些服务(service)的启动都是通过 shell script 来运行的,如果对于script不了解,一旦发生问题,可真是会求助无门啊!

  初识 shell script 

  1. 了解 shell script

        什么是 shell script(程序化脚本)呢?就字面上的意义,我们将其分为两部分。在“shell”部分,我们在项目7中已经提过了,那是在命令行界面下让我们与系统沟通的一个工具接口。那么“script”是什么?字面上的意义,script 是“脚本、剧本”的意思。整句话是说,shell scnipt是针对shell 所写的“脚本”。
       其实,shell scipt是利用 shell的功能所写的一个“程序(program)”。这个程序使用纯文本文件,将一些 shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到所想要的处理目的。

所以,简单地说,shell script就像是早期DOS年代的批处理(.bat),最简单的功能就是将许多命令写在一起,让使用者很轻易地就能够处理复杂的操作(运行一个文件“shell script”,就能够一次运行多个命令)。shell scnipt能提供数组、循环、条件与逻辑判断等重要功能,让用户也可以直接以 shell来撰写程序,而不必使用类似C程序语言等传统程序撰写的语法。

shell script可以被简单地看成是批处理文件,也可以被说成是一个程序语言,并且这个程序语言都是利用shell与相关工具命令组成的,所以不需要编译即可运行。另外,shell scrim还具有不错的排错(debug)工具、所以,它可以帮助系统管理员快速地管理好主机。

   2.编写与执行一个 shell script

   2.1在 shell script撰写中的注意事项

•命令的执行是从上而下、从左而右进行的。

•命令、选项与参数间的多个空格都会被忽略掉。
•空白行也将被忽略掉,并且按“Tab”键所生成的空白同样被视为空格键。

•如果读取到一个Enter 符号(CR),就尝试开始运行该行(或该串)命令。

•如果一行的内容太多,则可以使用“[Enter]”来延伸至下一行。

•“#”可作为注解。任何加在#后面的数据将全部被视为注解文字而被忽略。

    2.2 运行 shell script 程序

    现在假设程序文件名是 /home/dmtsai/shell.sh,那如何运行这个文件呢?很简单,可以有下面几个方法。

(1)直接命令下达:shell.sh文件必须要具备可读与可运行(rx)的权限。

绝对路径:使用/home/dmtsai/shell.sh来下达命令。

相对路径:假设工作目录在/home/dmtsai/,则使用/shell.sh来运行。

• 变量“PATH”功能:将 shell.sh 放在 PATH 指定的目录内,如~/bin/。(2)以bash程序来运行:通过“bash shell.sh”或“sh shell.sh”来运行。
由于linux默认使用者家目录下的~/bin目录会被设置到SPATH内,所以也可以将shell.sh创建在/home/dmtsai/bin/下面(~/bin日录需要自行设置)。此时,若shell.sh在~/bin内且具有rx 的权限,直接输人shell.sh即可运行该脚本程序。
   为何“sh shell.sh”也可以运行呢?这是因为/bin/sh其实就是/bin/bash(连结档),使用sb shell.sh 即告诉系统,我想要直接以bash的功能来运行 shell.sh这个文件内的相关命令,所以此时 shell.sh只要有r的权限即可被运行。也可以利用 sh的参数,如利用-n及-x来检查与追踪shell.sh的语法是否正确。

3. 编写第一个 shell script 程序
 

rooc@CentOS7-1 -]# cd; mkdir scripts; cd scripts

[root@RUEL7-1 ~]# vim sh01.sh 
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.

#History:

# 2022/11/03  Devil  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

在本项目中,请将所有撰写的scnpt放置到家目录的-/scrnpts这个目录内,以利于管理。

下面分析上面的程序。

    (1)第一行#!/bin/bash在宣告这个scnpt使用的shell名称。

     因为我们使用的是bash,所以必须要以“I/bin/bash”来宜告这个文件内的语法使用bat的语法。那么当这个程序被运行时,就能够加载 bash的相关环境配置文件(一般来说就是non-login shell的/.bashre)、并且运行bash来使我们下面的命令能够运行,这很重要。在很多情况下,如果没有设置好这一行,那么该程序很可能会无法运行,因为系统可能无法判断该程序需要使用什么shell来运行。

   (2)程序内容的说明。

    整个 script当中,除了第一行的“削”是用来声明shell的之外,其他的#都是“注释”用途。所以上面的程序当中,第二行以下就是用来说明整个程序的基本数据。
    建议:一定要养成说明该 scripl的内容与功能、版本信息、作者与联络方式、建立日期、历史记录等习惯。这将有助于未来程序的改写与调试。

   (3)主要环境变量的声明。

    务必将一些重要的环境变量设置好,其中PATH与LANG(如果使用与输出相关的信息时)是最重要的。如此一来,可让这个程序在运行时直接执行一些外部命令,而不必写绝对路径。

   (4)主要程序部分。

    在这个例子中,主要程序部分就是echo那一行。

    (5)运行成果告知(定义回传值)。

    一个命令的运行成功与否,可以使用S?这个变量来查看。也可以利用exit这个命令来让程序中断,并且回传一个数值给系统。在这个例子中,使用exit 0,这代表离开 script并且回传一个0给系统,所以当运行完这个 script后,若接着执行 echo $?,则可得到0的值。聪明的读者应该也知道了,利用这个exitn(n是数字)的功能,还可以自定义错误信息,让这个程序变得更加智能。

   该程序的运行结果如下:

[root@CentOS7-1 scripts]# sh sh01.sh
Hello world!
   同时,运行上述程序应该还会听到“咚”的一声,为什么呢?这是因为echo加上了-e选项。当你完成这个小 script之后,是不是感觉写脚本程序很简单?

   另外,你也可以利用“chmod a+x sh01.sh; /sh01.sh”来运行这个script。

  1. 养成撰写 shell script的良好习惯

        养成良好习惯是很重要的,但大家在刚开始撰写程序的时候,最容易忽略这部分,认为程序写出来就好了,其他的不重要。其实,如果程序的说明能够更清楚,对自己是有很大帮助的。

         建议一定要养成良好的senpt撰写习惯,在每个script的文件头处包含如下内容。

    ·scnpt的功能

    ·oscript的版本信意

    ·scnpt的作者与联络方式

    ·script的版权声明方式

·script的 History(历史记录)。

·script内较特殊的命令,使用“绝对路径”的方式来执行。

·script运行时需要的环境变量预先声明与设置。

    除了记录这些信息之外,在较为特殊的程序部分,建议务必加上注解说明。此外,程序的撰写建议使用嵌套方式,最好能以“Tab”键的空格缩排。这样程序会显得非常漂亮、有条理,可以很轻松地阅读与调试程序。另外,撰写script的工具最好使用vim而不是vi,因为vim有额外的语法检验机制,能够在第一阶段撰写时就发现语法方面的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻傻的心动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值