【注】本文翻译自:AnIntroductiontoBashScriptingBashScripting简介Fancyyourselfacomputerscientist,hobbyist,ortechnicalnerd?然后在某个时候,您将或应该考虑在您的数字工作空间中使用Bash脚本。Bash(BourneAgainShell)")是负责处理Unix系统命令行命令的解释器。它是由BrianFox编写的免费软件,于1989年发布,作为Sh(BourneShell)的替代品Bash被开发人员使用,数据科学家、系统管理员、网络工程师以及在日常工作中严重依赖Unix操作系统的任何其他人。一般来说,Bash脚本用于自动执行计算机科学家可能承担的例行补救任务。简而言之,shell脚本只不过是存储在文件中的一系列命令(如列表)。您可以在Linux和MacOS机器上使用Bash,甚至可以通过WindowsSubsystemforLinuxUse在Windows10机器上使用Bash。Bash通常以文本形式运行用户键入命令以使计算机执行操作的窗口。该语言也可用于从文件中读取和执行命令,称为shell脚本。Shell脚本本身就是一种编程语言,与任何其他语言不同,Bash是一种可以以多种方式使用的工具。如果您以前见过运行Linux操作系统(或类Unix环境)的机器,您可能见过终端控制台。命令与shell解释器交互的方式。诸如cd之类的命令用于导航文件目录,ls用于列出当前目录中的文件,nano用于编辑文件。在终端中使用Bash代码,它将由Bash解释器运行。ls之类的命令是位于/bin目录中的二进制可执行文件。当shell接收到命令时(当你在终端输入并回车时),它会执行ls文件,并为用户列出当前目录下的文件。使用命令ls/bin执行二进制ls带路径/bin作为列出/bin目录中文件的选项。执行ls-al将运行带有标志-a和-l作为选项的ls命令,以列出当前目录路径中的所有文件和目录以及这些项目的详细信息。touch是另一个这样的二进制可执行文件,用户可以在终端中使用的命令。此命令的输出是一个新文件,其名称由用户作为选项输入。例如,用户可以编写touchhello.txt,输出将是文件hello.txt。如何运行多个Bash命令要运行多个Bash命令并同时执行它们,用户可以将这些命令保存在一个文件中以供bash执行。假设您在Unix/类Unix环境中工作,让我们考虑一下我们之前讨论的内容。打开命令终端,开始使用您最喜欢的文本编辑器,例如nano或vi。写入:nanomake_a_file.txt然后,写入以下内容:#createafiletouchhello.txt#listfilesfromthisdirectoryls-al保存并退出文件并使用以下命令语法之一运行新脚本:shmake_a_file.txt或./make_a_file.txt或bashmake_a_file.txt如果您在执行该文件时遇到错误,请继续并通过键入以下内容为您刚刚编写的脚本文件设置可执行权限:chmod+xhello.sh如果您遵循此示例,您的Just创建了一个包含多个Bash命令的文件。Bash解释器将按顺序运行这些命令并忽略以散列符号#开头的行,因为这些行是注释。运行该文件会生成一个文件列表的终端输出,其中将包含一个hello.txt,而之前没有。通常,Bash脚本文件以包含.sh扩展名的格式保存,这表明该文件是shell脚本。但是,当文件以“she-bang”或“hashbang”开头时,我们可以像二进制文件一样执行它。创建脚本时,我们应该考虑到每个二进制shell文件都以俗称的“she-bang”(也称为sh-bang或hashbang)开头。这是脚本头的开头,第一行代码指示您将使用哪个shell。在脚本方面,我们有几个选项可供选择,包括shell(sh)、CShell、ZShell等。在这种情况下,我们将继续使用Bash来满足我们的脚本需求。she-bang是一组符号“#”和“!”在脚本的开头。我们知道井号(#)表示一行是注释。然而,对于she-bang,类Unix系统的程序解释器会将第一行的其余部分解释为解释器指令。在这种情况下,当写入#!/bin/bash时,散列符号和感叹号充当程序加载器的指示器,表明它使用位于/bin/bash目录中的BashShell程序。如何在Bash中创建变量与大多数其他Unixshell一样,Bash具有变量、管道、文件名通配符、此处文档、命令替换和控制流。Bash还支持交替(它与Cshell共享)、命令行完成以及信号处理和基本调试。有了这些特性,bash成为Unix和类Unix系统的默认命令解释器也就不足为奇了。与其他编程语言一样,我们可以在Bash中编写脚本时声明变量。但是,与其他语言不同,Bash不需要关键字来声明变量或为其分配数据类型。Bash没有类型系统,只将变量存储为字符串值。但是,Bash可以根据某些操作(例如算术运算)自动将变量转换为适当的类型。要编写一个变量并用一个值填充它,请以VARIABLE=VALUE格式编写,确保不包含空格。这是一个显示如何在Bash中创建变量的示例:#!/bin/bash#writeavariableNAME="William"#usethatvariableecho"Hello$NAME"变量也可以由用户输入填充:#!/bin/bashecho“你好$1,这是一个$2名称”在终端中:~$bashname.sh"William""great"你好William,这是一个很棒的名字你也可以使用像read这样的命令在运行时使用用户输入的变量:#!/bin/bashecho“你叫什么名字?”readnameecho“Hello$name”在终端中:~$bashname.shWhatisyourname?~$WilliamHelloWilliamBash中的if语句我们也可以通过附加功能实现if语句。#!/bin/bashecho“谁在那里?”readnameif[$name]echo“Hello$name”elseecho“一定是我的想象”终端中的fi:~$bashname.shWhoisthere?~$一定是我的想象如何创建备份管理脚本在Bash中需要考虑的其他项目包括设置备份管理脚本。这可能是一个容易启动和稍后重新访问的项目。有了它,您可以制作一个简单的脚本,该脚本获取一个或多个文件和文件夹,使用tar库压缩它们,并将它们放在您选择的新备份目录中。以下脚本是一个基本的备份脚本,它创建一个包含需要备份的文件的.Zip文件,并根据创建日期标记它们:#!/bin/bash#getthemonth,day,andyearof当前日期TIME_OF_BACKUP=`date+%m-%d-%y`#在名称中使用当前日期创建备份文件DESTINATION=/path/[BACKUPFOLDER]-$TIME_OF_BACKUP.tar.gz#包含文件的文件夹我们要备份TARGET_FOLDER=/path/[TARGETFOLDER]#createthebackuptar-cpzf$DESTINATION$TARGET_FOLDER作为奖励,您可能希望通过向备份脚本添加计划执行来增加此项目的复杂性,并提高级别自动化。为此,您可以使用crontab程序和命令库。如果您需要安装cron,请确保在继续安装cron之前更新您当前的软件包存储库。sudoapt-getupdatesudoapt-getinstallcron安装成功后,可以继续使用cron库来安排脚本的执行。crontab-e这将打开/etc/crontab文件并允许您通过编写如下命令来安排脚本的执行:@weekly/path/backup_script.sh我不会进一步讨论您可以使用crontab做什么,因为它不在本文讨论范围内。总结通过本入门指南,您将了解Bash是什么、脚本是什么以及Bash中有哪些脚本。您可以使用Bash做很多事情,并且不需要了解很多编程知识即可将不同的Linux应用程序和工具拼凑在一起并做出有用的东西。Bash脚本是一个非常有用的工具,我希望您能从本文中得到启发,将您的想法自动化。
