当前位置: 首页 > 科技观察

Bash入门系列1:创建并运行第一个bashshell脚本

时间:2023-03-14 11:33:45 科技观察

我们可能经常会在Linux服务器上做一些重复性的工作,比如文件备份,清理临时文件,或者数据库备份恢复等,对于这些重复性的工作,将它们自动化是一种常规操作,自动化任务是bash脚本功能的应用场景之一。今天我们将介绍如何创建一个简单的bashshell脚本,如何运行bash脚本,以及您必须了解的shell脚本知识。创建并运行第一个shell脚本让我们创建一个名为scripts的目录来存储所有bash脚本。mkdirscriptscdscripts然后在scripts目录下,使用cat命令创建一个名为hello.sh的文件:cat>hello.sh在hello.sh文件中编辑以下内容:echo'Hello,World!'按Ctrl+D保存文件,然后退出cat命令。您还可以使用其他文本编辑器,例如vim、emacs或nano;如果您使用桌面Linux,您还可以使用Gedit等图形文本编辑器向文件中添加文本。我们添加到hello.sh的脚本使用echo命令打印“HelloWorld”,您也可以直接在终端中使用此命令,但在我们的测试中,它是从shell脚本运行的。然后我们使用chmod命令给hello.sh文件添加可执行权限,如下:chmodu+xhello.sh然后运行脚本文件如下:bashhello.sh你会看到屏幕上打印出HelloWorld。这和我们学习其他编程语言一样,第一个程序总是打印HelloWorld。将shell脚本转换为bash脚本将shell脚本转换为bash脚本似乎有点令人困惑,不是吗?让我们简单地解释一下。Bash是“Bourne-Againshell”的缩写,它只是Linux中可用的众多shell之一。另一方面,shell是接受和执行命令的命令行解释器。如果您运行过Linux命令,那么您就使用过shell。当您在Linux中打开终端时,您已经在运行系统的默认shell。bash通常是大多数Linux系统上的默认shell,因此很多时候bash是shell的同义词。shell脚本的语法几乎相同,但也有区别。比如在zsh中,数组索引是从1开始的,而在bash中是从0开始的。用zsh写的shell脚本和bash写的脚本是不一样的,如果脚本里有数组的话。为了避免这种差异导致运行异常,我们应该告诉解释器当前脚本写在哪个shell中,这时候就需要使用shebang了!shell脚本开头的shebang行是shell脚本的第一行,即#!/bin/bash这一行通常被称为shebang,因为它以两个字符开头,分别是#(hash)和!(砰)。#!/bin/bashecho'你好,世界!'当我们在脚本顶部包含#!/bin/bash时,系统知道我们要使用bash作为脚本的解释器。所以hello.sh可以直接运行,前面没有bash。将shell脚本添加到PATH(以便它可以从任何目录运行)。我们之前运行hello.sh的时候,在前面加上了./这个字符。如果省略这两个字符,将出现错误:$hello.shhello.sh:commandnotfound首先Bash认为我们正在尝试运行一个名为hello.sh的命令,当我们在终端上运行任何命令时,shell会寻找该命令存储在PATH变量中的一组目录中。可以使用echo命令查看PATH变量的内容:echo$PATH/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin在PATH变量中,各个目录的路径之间用冒号隔开:。echo、cat等Linux命令可以从任何地方运行,因为它们的可执行文件存储在包含在PATH中的bin目录中。当我们运行命令时,系统会检查PATH中所有可能的位置以找到命令的可执行文件。如果我们希望我们的bash脚本从任何地方运行,我们需要将脚本的位置添加到PATH变量中。首先使用pwd命令查看当前目录的位置(bash脚本的位置):pwd然后使用export命令将脚本目录添加到PATH变量中:exportPATH=$PATH:/home/user/scripts现在让我们再次运行hello。sh:$hello.sh你好,世界!可以看到添加到PATH变量后,脚本可以正常运行了。