Linux shell脚本的编写和运行(附带实例)
在 Linux 中,将命令或条件判断、流程控制语句写入文件,通过运行文件的方式执行文件中的命令,其实就是在运行脚本。
接下来,让我们试着用命令来编辑一个简单的脚本吧。
在编辑脚本时,echo 命令也是常见且常用的,使用 echo 命令可以输出提示、判断脚本执行情况或变量取值情况等。接下来我们将简单地使用 echo 命令完成第一个脚本,具体如下:
不过,我们也会发现,在写编辑 shell 脚本时,不加“#!/bin/bash”这句话,shell 脚本也可以正确执行。那是因为我们用户默认 shell 就是 /bin/bash,在没有声明 shell 类型时,会选择使用当前用户 shell 类型运行脚本。
如果把脚本放在默认环境而不是 Bash 的环境中运行,又或者编写脚本使用的不是纯 Bash 语言,而是嵌入了其他语言(如 expect 语言),那么脚本就不能正确执行了。因此,大家还是要记住我们的 shell 脚本都必须以“#!/bin/bash”开头。
在 shell 脚本中,除“#!/bin/bash”这行外,其他行只要以“#”开头就都是注释。建议大家在编写脚本时加入清晰而详尽的注释,用于对脚本中的语句进行解释和说明,这些都是在建立良好编程规范时应该注意的问题。
随后,来看脚本中的第二行。在第二行中写入了 echo 命令,输出“Hello Rocky Linux”,其实写在脚本中的 echo 命令的执行效果和在命令行中执行 echo 的效果并无较大差别。
现在我们只是以 echo 命令为例进行编写脚本。实际上,我们曾经学习过的命令都可以写入文件,以执行脚本的方式执行脚本中的命令,如 EOF、ls、grep 等命令都可以写到脚本中并以此方式运行。
接下来,让我们试着用命令来编辑一个简单的脚本吧。
编辑shell脚本
我们应该学习了 echo 命令的用法、如何调整格式、如何调整字体颜色,也学习了如何通过重定向的方式将 echo 输出的字符串写入指定的文件。在编辑脚本时,echo 命令也是常见且常用的,使用 echo 命令可以输出提示、判断脚本执行情况或变量取值情况等。接下来我们将简单地使用 echo 命令完成第一个脚本,具体如下:
[root@localhost ~]# vim /root/echo.sh #!/bin/bash echo "Hello Rocky Linux"关于文件中第一行写入的“#!/bin/bash”:
- 通常在 Linux 配置文件中会认为以“#”开头的行表示为注释信息,是不生效的。但是在 shell 脚本中,以“#!”开头表示的是当前文件中的解释器类型,称为“shebang”;
- “/bin/bash”表示在当前文件中后续语句遵循 /bin/bash 语法格式并使用 /bin/bash 作为命令解释器。在 shell 脚本的格式规范中一定要声明解释器类型,如果解释器类型写错,那么在执行时会报错并执行失败。
不过,我们也会发现,在写编辑 shell 脚本时,不加“#!/bin/bash”这句话,shell 脚本也可以正确执行。那是因为我们用户默认 shell 就是 /bin/bash,在没有声明 shell 类型时,会选择使用当前用户 shell 类型运行脚本。
如果把脚本放在默认环境而不是 Bash 的环境中运行,又或者编写脚本使用的不是纯 Bash 语言,而是嵌入了其他语言(如 expect 语言),那么脚本就不能正确执行了。因此,大家还是要记住我们的 shell 脚本都必须以“#!/bin/bash”开头。
在 shell 脚本中,除“#!/bin/bash”这行外,其他行只要以“#”开头就都是注释。建议大家在编写脚本时加入清晰而详尽的注释,用于对脚本中的语句进行解释和说明,这些都是在建立良好编程规范时应该注意的问题。
随后,来看脚本中的第二行。在第二行中写入了 echo 命令,输出“Hello Rocky Linux”,其实写在脚本中的 echo 命令的执行效果和在命令行中执行 echo 的效果并无较大差别。
现在我们只是以 echo 命令为例进行编写脚本。实际上,我们曾经学习过的命令都可以写入文件,以执行脚本的方式执行脚本中的命令,如 EOF、ls、grep 等命令都可以写到脚本中并以此方式运行。
运行shell脚本
前面我们编辑了第一个脚本,但是在 Linux 中运行脚本有多种可选方式,接下来逐一介绍。1) 使用绝对路径或相对路径运行脚本
我们可以使用脚本的绝对路径或相对路径来运行脚本,使用这种方式的前提是脚本文件需要有可执行权限。在使用绝对路径或相对路径执行脚本时,脚本在子 shell 中执行,执行过程如下:[root@localhost ~]# ls -l /root/echo.sh -rw-r--r--. 1 root root 37 Nov 14 17:01 /root/echo.sh [root@localhost ~]# /root/echo.sh -bash: /root/echo.sh: Permission denied #可以看到,在文件没有可执行权限时,脚本执行失败我们给脚本文件加入可执行权限:
[root@localhost ~]# chmod +x /root/echo.sh [root@localhost ~]# /root/echo.sh Hello Rocky Linux #执行成功,输出了echo后的字符串
2) 使用bash命令运行脚本
使用 bash 命令可以在脚本没有可执行权限的情况下运行脚本。使用 bash 命令执行脚本时,脚本在子 shell 中执行,执行效果如下:[root@localhost ~]# ls -l /root/echo.sh -rw-r--r--. 1 root root 37 Nov 14 17:01 /root/echo.sh #先取消root/echo.sh文件的可执行权限 [root@localhost ~]# bash /root/echo.sh Hello Rocky Linux #使用bash命令还是能够正常执行脚本中的shell语句的