乐趣区

关于shell:Bash-脚本简介

【注】本文译自:An Introduction to Bash Scripting

Bash 脚本简介

空想本人是计算机科学家、业余爱好者或技术书呆子吗?而后在某个时候,您将或应该思考在您的数字工作区中应用 Bash 脚本。

Bash (Bourne Again Shell)”) 是一个解释器,负责解决 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件,并于 1989 年公布的免费软件,作为 Sh(Bourne Shell)的替代品。Bash 被开发人员、数据科学家、系统管理员、网络工程师和任何其余在日常工作中重大依赖 Unix 操作系统的人应用。一般来说,Bash 脚本用于自动化计算机科学家可能承当的日常补救工作。简而言之,shell 脚本只不过是存储在一个文件(如列表)中的一系列命令。

您能够在 Linux 和 MacOS 机器上应用 Bash,甚至能够通过实用于 Linux 的 Windows 子系统在 Windows 10 机器上应用。Bash 通常在文本窗口中运行,用户能够在其中键入命令让计算机执行操作。该语言还可用于从文件读取和执行命令,称为 shell 脚本。Shell 脚本自身就是一种编程语言,与任何其余语言一样,Bash 是一种能够以多种形式应用的工具。

如果您之前见过运行 Linux 操作系统(或类 Unix 环境)的机器,您可能也见过终端控制台。终端是用户应用某些命令与 shell 解释器进行交互的形式。诸如 cd 导航文件目录,ls 列出当前目录中的文件,以及 nano 编辑文件等命令。

在终端中应用 Bash 代码,它将由 Bash 解释器运行。ls 之类的命令是位于 /bin 目录中的二进制可执行文件。当 shell 收到该命令时(当您在终端中键入它并按 Enter 键时),它会执行 ls 文件并为用户列出当前目录中的文件。应用命令 ls /bin 以门路 /bin 作为选项执行二进制 ls,列出 /bin 目录中的文件。执行 ls -al 会运行带有标记 -a-l 作为选项的 ls 命令,列出当前目录门路中的所有文件和目录以及无关这些我的项目的详细信息。

touch 是另一个这样的二进制可执行文件,用户能够在终端中应用的命令。此命令的输入是一个新文件,用户输出的名称作为选项。例如,用户能够编写 touch hello.txt,输入将是一个文件 hello.txt

如何运行多个 Bash 命令

要运行多个 Bash 命令并让它们一次执行,用户能够将这些命令保留在单个文件中,以便用 bash 执行。假如您在 Unix/ 类 Unix 环境中工作,让咱们考虑一下咱们之前探讨过的内容。

关上命令终端后,首先应用您喜爱的文本编辑器,例如 nanovi。写入:

nano make_a_file.txt

而后,写出以下内容:

#create a file
touch hello.txt

#list files from this directory
ls -al

保留并退出文件,并应用以下命令语法之一运行新脚本:

sh make_a_file.txt

./make_a_file.txt

bash make_a_file.txt

如果执行该文件时出错,请通过输出以下内容持续为您刚刚编写的脚本文件设置可执行权限:

chmod +x hello.sh

如果您遵循了这个示例,那么您刚刚创立了一个蕴含多个 Bash 命令的文件。Bash 解释器将按程序运行这些命令并疏忽以哈希符号 # 结尾的行,因为这些行是正文。运行该文件会产生一个文件列表的终端输入,其中将蕴含一个 hello.txt,之前没有。

通常,一个 Bash 脚本文件以蕴含 .sh 扩展名的格局保留,这表明该文件是一个 shell 脚本。然而,当文件以“she-bang”或“hashbang”结尾时,咱们能够像二进制文件一样执行它。

在创立脚本时,咱们应该思考到每个二进制 shell 文件都以俗称的“she-bang”(也称为 sh-bang 或 hashbang)结尾。这是脚本题目的开始,第一行代码批示您将应用哪个 shell。在制作脚本时,咱们有多种抉择可供选择,包含 shell (sh)C ShellZ Shell 等。在这种状况下,咱们将持续应用 Bash 来满足咱们的脚本需要。She-bang 是脚本结尾的一组符号 “#”“!”。咱们晓得井号 (#) 示意一行是正文。然而,应用 she-bang,类 Unix 零碎的程序解释器会将第一行的其余部分解析为解释器指令。在这种状况下,在写入 #!/bin/bash 时,哈希符号和感叹号作为程序加载器的批示符,批示它应用位于 /bin/bash 目录的 Bash Shell 程序。

如何在 Bash 中创立变量

像大多数其余 Unix shell 一样,Bash 具备变量、管道、文件名通配符、here 文档、命令替换和控制流。Bash 还反对交替(它与 C shell 共享)、命令行实现以及信号处理和根本调试。有了这些个性,bash 成为 Unix 和类 Unix 零碎的默认命令解释器也就难能可贵了。

像其余编程语言一样,咱们能够在应用 Bash 编写脚本时申明变量。然而,与其余语言不同,Bash 不须要关键字来申明变量或为其调配数据类型。Bash 没有类型零碎,仅将变量保留为字符串值。然而,Bash 能够 依据某些操作(例如算术运算)主动将变量转换为适合的类型。要写入变量并为其填充值,请以 VARIABLE=VALUE 格局写入内容,确保不蕴含空格。上面是一个示例,展现了如何在 Bash 中创立变量:

#!/bin/bash

#write a variable
NAME=“William”#use that variable
echo“Hello $NAME”

用户还能够通过用户输出来填充变量:

#!/bin/bash

echo“Hello $1, that is a $2 name”

在终端中:

~$bash name.sh“William”“great”Hello William, that is a great name

还能够应用 read 之类的命令在运行时应用用户输出的变量:

#!/bin/bash

echo“What is your name?”read name

echo“Hello $name”

在终端中:

~$bash name.sh
What is your name?
~$William
Hello William

Bash 中的 if 语句

咱们还能够为附加性能实现 if 语句。

#!/bin/bash

echo“Who is there?”read name

if [$name]
echo“Hello $name”else
 echo“Must’ve been my imagination”fi

在终端中:

~$bash name.sh
Who is there?
~$
Must’ve been my imagination

如何在 Bash 中创立备份治理脚本

其余须要思考的我的项目包含设置备份治理脚本。这能够是一个简略的我的项目,能够开始并在当前从新拜访。有了这个,您能够制作一个简略的脚本,针对一个或多个文件和文件夹应用 tar 库进行压缩,并将其搁置在您抉择的新备份目录中。以下脚本是一个根本的备份脚本,它为须要备份的文件创建一个 .Zip 文件,并依据创立日期对它们进行标记:

#!/bin/bash

#get the month, day, and year of the current date
TIME_OF_BACKUP=`date +%m-%d-%y`

#create a backup file using the current date in its name
DESTINATION=/path/[BACKUP FOLDER]-$TIME_OF_BACKUP.tar.gz

#the folder that contains the files that we want to backup
TARGET_FOLDER=/path/[TARGET FOLDER]

#create the backup
tar -cpzf $DESTINATION $TARGET_FOLDER

作为处分,您可能心愿通过为备份脚本增加打算执行来减少此我的项目的一些复杂性,并减少自动化级别。为此,您能够应用 crontab 程序和命令库。如果您须要装置 cron,请确保在持续装置 cron 之前更新您以后的包库。

sudo apt-get update
sudo apt-get install cron

胜利装置后,您能够持续应用 cron 库来安顿脚本的执行。

crontab -e

这将关上 /etc/crontab 文件,并容许您编写如下命令来安顿脚本的执行:

@weekly /path/backup_script.sh

我不会进一步探讨您能够应用 crontab 做什么,因为它不在本文的范畴内。

总结

通过本入门指南,您将对什么是 Bash、什么是脚本以及 Bash 中的脚本有什么理解。你能够用 Bash 做很多事件,而且你不须要理解很多对于编程的常识,就能够将不同的 Linux 应用程序和工具拼凑在一起,并制作一些有用的货色。Bash 脚本是一个十分有用的工具,心愿您能从这篇文章中取得灵感,让您的想法自动化。

退出移动版