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

BashShell脚本编写新手指南(一)

时间:2023-03-20 21:54:02 科技观察

正如标题所示,本文将为初学者介绍BashShell脚本编写知识。虽然本文不回顾Bash的历史,但有很多资源可以让读者更容易了解它,读者也可以直接访问GNU项目https://www.gnu.org/software/bash/.我们将从了解一些非常基本的概念开始,然后将这些知识整合在一起。创建脚本文件首先,让我们创建一个脚本文件。我们要确保当前目录是主目录。cd~在主目录中创建示例文件。文件名可以任意命名,本文使用learnToScript.sh作为文件名。touchlearnToScript.sh此时会在主目录下生成一个名为learnToScript.sh的文件。输入以下命令验证该文件是否存在,注意其权限为-rw-rw-r–。[zexcon@trinity?]$ls-ltotal7drwxr-xr-x.1zexconzexcon90aug3013:08desktopdrwxr-xr-xr-xr-xr-xr-xr-x.1zexconconep1608:53documentsto-x.1zexconzexcon0Jul716:04Musicdrwxr-xr-x.1zexconzexcon318Sep1513:53Picturesdrwxr-xr-x.1zexconzexcon0Jul716:04Publicdrwxr-xr-x.1zexconzexcon0Jul716:04Videos[zexcon@trinity要做的另一件事]$您可以尝试在不编写任何内容的情况下执行脚本。在命令行中输入以下内容:./learnToScript.sh[zexcon~]$./learnToScript.shbash:./learnToScript.sh:Permissiondenied提示permissiondeniedbecauseThefiledoesnothaveexecutepermission.所以你需要更改文件的权限才能执行脚本。假设我们已经了解了权限,回到终端修改learnToScript.sh文件增加执行权限。输入以下内容:chmod755learnToScript.sh[zexcon@trinity~]$ls-ltotal7drwxr-xr-x.1zexconzexcon90Aug3013:08Desktopdrwxr-xr-x.1zexconzexcon80Sep1608:53Documentsdrwxr-xr-x.1zexconzexcon1222Sep1608:53Downloads-rwxr-xr-x.1zexconzexcon70Sep1710:10learnToScript.shdrwxr-xr-x.1zexconzexcon0Jul716:04Musicdrwxr-xr-x.1zexconzexcon318Sep1513:53Picturesdrwxr-xr-x.1zexconzexcon0Jul716:04Publicdrwxr-xr-x.1zexconzexcon0Jul716:04Videos[zexcon@trinity~]$好的,现在一切准备就绪,你已经被授予learnToScript.sh命令的读、写和执行权限(-rwxr-xr-x).编辑脚本文件下面的内容需要熟悉vim或其他类似的文本编辑器。本文选择vim。在命令提示符处键入以下内容:vimlearnToScript.sh这将打开一个空文本文件,其中包含一堆波浪号。在键盘上输入i将进入插入模式。您可以通过查看终端窗口的左下角来确认它处于该模式。(友情推荐,nanoeditor也很不错。)接下来我们要保证文件被正确的解释器识别。所以,输入#!和bash的目录/bin/bash:#!/bin/bash本教程步骤中要做的最后一件事是保存文件。按Esc退出输入模式,然后按Shift+:。在冒号处输入wq,按回车键写入(w)文件,退出(q)vim编辑器。请记住,在使用vim时,要写入文档,您需要键入i,然后您会在底部看到–INSERT–。保存文档需要按Esc退出输入模式,然后按Shift+:,输入w写入文件;或按Esc,然后按Shift+:输入q不保存退出;或将wq连接在一起以写入并关闭文件。Esc本身只是退出插入模式。您可以在其官方网站或教程网站上找到有关vim的更多信息。开始正式编写脚本echo命令echo命令用于向终端返回一些信息,可以使用单引号、双引号或不使用引号。那么让我们用传统的HelloWorld来试试吧!#!/bin/bashechoHelloWorld!echo'HelloWorld!'echo"HelloWorld!"[zexcon~]$./learnToScript.shHelloWorld!HelloWorld!HelloWorld![zexcon~]$注意上面三行得到的结果是一样的。结果不一定与单引号、双引号或无引号相同,但我在这个基本脚本中得到了相同的结果。在某些情况下,不同类型的报价会导致结果不同。祝贺您编写了第一个Bash脚本。随着您继续创建更多脚本并让您的想法飞扬,这里有一些您可能想知道的更多信息。CommandSubstitution$()和``commandsubstitution可以达到以下效果:获取在命令行上执行命令的结果,并将结果写入变量。例如,如果您在命令提示符下键入ls,您可以获得当前工作目录的列表。下面我们用这个命令来练习一下。有两个命令替换选项,注意:第一个选项使用键盘左侧Tab键上方的反引号。它与波浪号~在同一个键上。第二个选项使用shell变量。#!/bin/bashcommand1=`ls`echo$command1command2=$(ls)echo$command2[zexcon~]$./learnToScript.shDesktopDocumentsDownloadslearnToScript.shMusicPicturesPublicsnapVideosDesktopDocumentsDownloadslearnToScript.shMusicPicturesPublicsnapVideosDesktopDocumentsDownloadslearnToScript.shMusicPicturesPublicsnapVideos[Notebetweentheequalsignandthebeginningvariablezexcon~]不要有空格。使用这两个选项获得的结果完全相同。请注意,变量需要以美元符号开头。如果您忘记并回显不带美元符号的命令变量,则只会输出命令的名称,如下所示:#!/bin/bashcommand1=`ls`echocommand1command2=$(ls)echocommand2[zexcon~]$。/learnToScript.shcommand1command2[zexcon~]$双括号(())那么双括号有什么用呢?非常简单,双括号用于数学方程式。#!/bin/bashecho$((5+3))echo$((5-3))echo$((5*3))echo$((5/3))[zexcon~]$./learnToScript。sh82151[zexcon~]$结论到目前为止,我们已经创建了第一个脚本。我们知道如何执行多个命令:将它们放在脚本中并运行它以获得结果。下一篇文章将继续讨论并学习重定向输入和输出、管道命令、使用双括号或添加注释。