Linux自动化运维:Shell与Ansible(微课版)
上QQ阅读APP看书,第一时间看更新

1.2.2 创建和执行Shell脚本

1. Shell脚本基本格式

Linux Shell脚本是一种在Linux操作系统中用Shell编写和运行的程序。Shell脚本由一系列Shell命令和语句组成,可以完成各种复杂的操作。例如,可以编写Shell脚本来自动备份文件、安装软件、批量执行命令等。Shell脚本可以用来自动执行任务、执行重复性操作、管理系统或应用程序等。

Shell命令是指Shell支持的各种命令,如cd、ls、echo等。学习Shell编程时,需要了解这些命令的用法和参数,以便使用它们来控制操作系统和运行程序。

在Shell中,有两种类型的命令:内置命令和外置命令。内置命令是Shell本身具有的命令,它们由Shell程序直接执行,而不需要调用其他程序。例如,cd命令是一个内置命令,它用于切换当前工作目录。外置命令是Shell并不具有的命令,它们需要调用外部程序来执行。例如,ls命令是一个外置命令,它用于列出文件和目录的信息。

V1-2 创建和执行Shell脚本

通常,内置命令的执行效率比外置命令高,因为它们不需要调用外部程序。但是,外置命令提供了更多的功能和更多的选项,也更常用。

在Linux操作系统中,type命令用于查询命令的类型,可以查看指定命令是内置命令还是外置命令,以及别名、关键字等信息。例如,可以使用type命令来查看一个命令是内置命令还是外置命令。


[opencloud@server ~]$ type cd
cd is a shell builtin
[opencloud@server ~]$ type ls
ls is /bin/ls

Shell语法是指Shell编程语言的语法规则,包括变量、流程控制、函数等方面的语法。学习Shell编程需要掌握Shell语法,这样才能编写出有效的Shell脚本。

编写Shell脚本有许多方法,常见的方法就是使用文本编辑器。Linux操作系统中通常使用vi、vim文本编辑器,也可以使用Sublime Text、Visual Studio Code等跨平台文本编辑器来编写Shell脚本。在文本编辑器中输入脚本内容,并使用.sh或.bash作为文件扩展名保存脚本。

下面是一个简单的Shell脚本的基本结构。


#!/bin/bash
cat<<EOF
This is a comment line
This is also a comment line
EOF
# echo "hello world"
echo "hello world"

在计算机领域中,Shebang或hashbang(#!代码的英文读法)是一个由井号和感叹号构成的字符序列#!,它出现在文本文件第一行的前两个字符位置,用于告诉操作系统使用哪个解释器。文件中存在#!的情况下,类UNIX和Linux操作系统的程序载入器会分析#!后的内容,将这些内容作为解释器指令,调用该指令,并将载有#!的文件路径作为该解释器的参数。#!是一项操作系统特性,可用于任何解释型语言,如Shell、Python、Perl等。

在Shell脚本中,#!/bin/bash这一行指定了脚本的解释器为/bin/bash,脚本文件在执行时会实际调用/bin/bash程序,这一行内容也是Shell脚本的标准起始行。

2. Shell注释

在Shell脚本中使用注释可以帮助用户更好地理解脚本的功能,并使脚本更易于维护。在Shell脚本中,可以使用以下方法来注释多行语句。

(1)使用#字符在每行的开头注释。在每行的开头添加#字符可以将整行注释掉。


# This is a comment line
# This is also a comment line
# This is yet another comment line

(2)使用<<将多行语句封装在一对字符串中。


cat << EOF
This is a comment line
This is also a comment line
This is yet another comment line
EOF

在这个脚本中,<<EOF和EOF之间的内容都会被视为注释,不会被解释器执行。注释标记的结束符必须与开始符完全一致。可以将EOF替换为其他字符串,只要在注释的开始和结束处使用相同的字符串即可。

3. 执行Shell脚本

在脚本文件的第一行指定执行脚本所需的Shell类型,并使用#!开头。例如,如果使用bash命令执行脚本,则可以在脚本的第一行添加#!/bin/bash,这样就可以像执行任何其他命令一样执行脚本了。

在使用任何方法执行脚本之前,需要确保脚本文件具有可执行权限。如果脚本文件名为myscript.sh,则可以执行chmod +x myscript.sh命令为脚本文件赋予可执行权限。

在终端中可以使用绝对路径或相对路径来执行脚本。例如,如果脚本文件名为myscript.sh,则可以使用以下方法执行脚本。

在终端中使用绝对路径执行脚本时,可以在任何位置执行脚本,而不仅仅在脚本文件所在的目录执行脚本,此时将脚本的绝对路径作为参数传递给bash命令即可。


[opencloud@server ~]$ bash /path/to/myscript.sh

在终端中使用相对路径执行脚本时,需要将命令行的路径切换到脚本目录,脚本文件应位于当前目录中,以“。/文件名”的方式执行脚本。


[opencloud@server ~]$ pwd
/path/to/
[opencloud@server ~]$ ls
myscript.sh
[opencloud@server ~]$ ./myscript.sh