五个鲜为人知的现代 Bash 脚本编写技术
Bash命令语言常被程序员用来编写Shell脚本,以实现手动任务的自动化。他们会编写Bash脚本来自动化各种配置、文件操作、构建结果生成和与DevOps相关的活动。几乎所有类Unix或基于Unix的操作系统都为用户提供预安装的Bash解释器,因此我们可以使用Bash编写更具可移植性的自动化脚本。
正如我们已经知道的那样,Bash脚本编写是指使用Bash命令语言的语法、内置Bash命令和核心操作系统CLI程序(如GNU核心工具)编写一系列命令。一般而言,遵循传统的Bash脚本会执行一些命令并在终端上输出纯文本。
我们可以使用几个特别的理念来使我们的 Bash 脚本更加适用于未来且更加用户友好。使用一些不太常见的现代Bash脚本编写技巧,可以令您的自动化脚本更具现代感,涵盖以下概念。
显示动画以指示长时间运行的任务
在某些情况下,我们需要从Bash脚本中执行长时间运行的命令。有几种方法可以指示长时间运行的任务。显示带有三个点的消息(也称为省略号),最简单和最容易的方法是使用echo命令。然而,这种技术所产生的信息是静态的,缺乏互动性和用户友好性,对于开发人员也是如此。
轻松展示ASCII动画只需使用核心Unix操作系统命令和Bash内置命令即可。看下面这个只有两个动画帧的简单动画示例:
#!/bin/bash# Linux迷 www.linuxmi.comwhile true;do# Frame #1printf "\r< Loading..." sleep 0.5# Frame #2 printf "\r> Loading..." sleep 0.5 done
上面的Bash脚本在终端上显示一个无尽的两帧动画。printf语句使用\r转义字符来重置当前行的终端光标。上面的脚本呈现了以下基于文本的动画:
一个简单的两帧文本动画
我们可以在动画中添加更多帧,并使用以下Bash脚本在特定耗时任务完成之前一直显示动画。
#!/bin/bash# Linux迷 www.linuxmi.comsleep 5 &pid=$!frames="/ | \\ -"while kill -0 $pid 2&>1 > /dev/null;dofor frame in $frames;doprintf "\r$frame Loading..."sleep 0.5donedoneprintf "\n"
该脚本将显示一个基于文本的旋转器动画,直到经过5秒的sleep命令完成执行。同样地,我们可以使用旋转器动画来代替静态消息,在执行任何需要耗时的任务时显示。预览如下。
一个带有旋转器文本动画的Bash脚本,作者的截图 这些基于文本的动画使命令行程序更加用户友好和互动,因此大多数现代命令行程序都显示这些ASCII动画。现在你知道如何通过改变帧字符列表,为你的Bash脚本添加动画效果。
从Bash显示本地GUI通知
常用的开发人员通常会使用Bash脚本和命令行程序来提供工具的终端界面。例如,Flutter框架为开发人员提供了flutter命令行程序,用于管理Flutter应用程序和配置Flutter应用程序开发环境。假设你正在开发一个耗时的命令行脚本。在用户不查看终端输出时,如何显示重要消息?
GUI通知在所有Unix类和基于Unix的操作系统中都可以使用特定的命令来显示。我们可以从Bash脚本中调用这些命令来显示本地通知。比如,在以GNU/Linux为基础的操作系统上,你可以使用notify-send命令,示例如下:。
#!/bin/bash# Linux迷 www.linuxmi.comsleep 10notify-send "notify.sh" "Task #1 已成功完成 www.linuxmi.com"
一些GNU/Linux发行版通常会预装notify-send工具的版本。上面的Bash脚本在十秒后显示了一个本地通知。预览如下:
在Ubuntu上的本地通知截图
macOS用户可以通过在Bash中执行AppleScript解释器来显示本地通知,如下所示:
#!/bin/bashsleep 10osascript -e "display notification \"Task #1 www.linuxmi.com 已成功完成\" with title \"notify.sh\""
在Bash脚本中的多进程处理非常有助于通过长时间运行的脚本或永久运行的后台脚本向用户通知重要事件。
在Bash脚本中的多进程处理
通常,程序员使用Bash脚本按顺序运行命令。所以,Bash解释器会一个接一个地运行每个语句,直到到达源文件的结尾或遇到一个exit语句。然而,我们可以改变这种顺序执行的方式,实现并行执行以加快自动化脚本的速度。
我们可以将整个 Bash 脚本分成几个独立的函数,从而让每个函数可以异步运行。接下来,我们可以将所有Bash函数作为后台任务运行。最后,我们可以使用内置的wait命令来保持脚本执行过程处于活动状态,直到所有异步进程执行结束。
请看以下示例代码:
#!/bin/bash# Linux迷 www.linuxmi.comfunction task1() {echo "Running task1..."sleep 5}function task2() {echo "Running task2..."sleep 5}task1 &task2 &waitecho "www.linuxmi.com 全部完成"
在这个例子中,我们将两个并行函数task1和task2作为后台任务运行。我们还使用了内置的wait命令来确保脚本实例保持活动状态,直到后台任务完成执行。如果你检查脚本的执行时间,你会发现这两个函数在大约五秒钟内结束,而不是十秒钟。
使用Bash显示GUI组件
我们之前探讨了如何使用Bash脚本运行一段时间后显示GUI通知。同样地,我们可以展示其他的GUI组件,例如提示框、文本框和文件选择器。有时我们需要为非技术人员创建基于GUI的自动化程序。如果你已经了解Bash脚本编写,你不需要使用其他GUI开发工具来创建简单的GUI应用程序——因为我们可以使用Bash显示GUI元素。
zenity程序提供了几个命令,用于在GNU/Linux命令行环境中显示各种GUI元素。例如,我们可以使用以下命令打开文件选择对话框。
zenity --file-selection
Zenity版本通常预装在大多数基于GNOME的GNU/Linux操作系统发行版中。此外,作为替代,你可以在基于KDE的GNU/Linux发行版中使用kdialog命令。
macOS用户可以像往常一样调用AppleScript解释器。例如,他们可以使用以下命令通过Bash脚本显示文件选择对话框。
osascript -e "POSIX path of (choose file)"
你也可以像Zenity那样构建自己的二进制文件,并从Bash脚本中显示任何GUI组件。此外,你还可以使用Neutralinojs通过Bash脚本在本地/远程窗口中显示交互式的HTML界面。
使用文本样式现代化终端输出
我们经常使用echo命令输出脚本中的消息。默认情况下,echo命令根据默认终端文本样式打印给定的文本。在特定情况下,我们可以根据当前环境应用基本的用户体验原则来提升文本样式。例如,我们可以使用红色显示错误消息。此外,您可以使用粗体字体样式强调段落中的一些关键细节。
tput是一个Unix程序,提供控制当前终端屏幕的命令。它提供了改变终端光标位置、获取终端信息和更改文本样式的命令。我们可以将tput命令与echo命令结合使用,在所有类Unix和基于Unix的操作系统上打印各种文本样式。
请看以下示例,打印不同的文本样式:
#!/bin/bash# Linux迷 www.linuxmi.combold=$(tput bold)underline=$(tput smul)italic=$(tput sitm)info=$(tput setaf 2)error=$(tput setaf 160)warn=$(tput setaf 214)reset=$(tput sgr0)echo "${info}INFO${reset}: This is an ${bold}info${reset} message"echo "${error}ERROR${reset}: This is an ${underline}error${reset} message"echo "${warn}WARN${reset}: This is a ${italic}warning${reset} message"
在这里,我们使用tput命令为每种文本样式定义了一些变量。最后,我们使用echo命令执行临时保存的命令,以显示不同的文本样式,如下所示。
Bash中的文本样式屏幕截图
您可以使用上述方法为Bash脚本构建自己的个性化颜色方案。为了掩盖kill命令的错误消息,上述代码示例使用了空设备文件(/dev/null)。
以上是五个鲜为人知的现代 Bash 脚本编写技术的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

自动化和任务调度在简化软件开发中的重复任务方面发挥着至关重要的作用。想象一下,有一个Python脚本需要每5分钟执行一次,例如从API获取数据、执行数据处理或发送定期更新。如此频繁地手动运行脚本可能非常耗时并且容易出错。这就是任务调度的用武之地。在这篇博文中,我们将探讨如何安排Python脚本每5分钟执行一次,确保它自动运行而无需手动干预。我们将讨论可用于实现此目标的不同方法和库,使您能够有效地自动化任务。使用time.sleep()函数每5分钟运行一次Python脚本的一种简单方法是利用tim

剪映是一款视频编辑工具,带有全面的剪辑功能,支持变速,有多样滤镜和美颜的效果,还有丰富的曲库资源。在这款软件中,可以直接对视频进行剪辑,也可以创建剪辑脚本,但是应该怎么操作呢?本篇教程小编就来介绍一下剪映制作脚本的方法。 制作方法 1、在电脑中点击打开剪映软件,然后找到“创作脚本”选项,点击打开。 2、在创作脚本页面中,输入“脚本标题”,然后在大纲中输入拍摄内容的简介。 3、如何在大纲中就能看到“分镜描述”选项,在框内可以

如何在Linux系统中执行.sh文件?在Linux系统中,.sh文件是一种被称为Shell脚本的文件,用于执行一系列的命令。执行.sh文件是非常常见的操作,本文将介绍如何在Linux系统中执行.sh文件,并提供具体的代码示例。方法一:使用绝对路径执行.sh文件要在Linux系统中执行一个.sh文件,可以使用绝对路径来指定该文件的位置。以下是具体的步骤:打开终

在当今快节奏的数字世界中,能够自动执行计算机任务可以极大地提高生产力和便利性。其中一项任务是关闭计算机,如果手动完成,这可能会非常耗时。值得庆幸的是,Python为我们提供了一套强大的工具来与系统交互并自动执行此类任务。在这篇博文中,我们将探讨如何编写Python脚本来轻松关闭计算机。无论您是想安排自动关机、远程启动关机,还是只是通过避免手动关机来节省时间,此脚本都会派上用场。导入所需的模块在开始编写脚本之前,我们需要导入必要的模块,以便与系统交互并执行关闭命令。在本节中,我们将导入os模块(它

重新启动计算机是一项常见任务,我们经常执行此任务来解决问题、安装更新或应用系统更改。虽然重新启动计算机的方法有很多种,但使用Python脚本可以提供自动化和便利性。在本文中,我们将探讨如何创建一个可以通过简单执行来重新启动计算机的Python脚本。我们将首先讨论重新启动计算机的重要性及其带来的好处。然后,我们将深入研究Python脚本的实现细节,解释所涉及的必要模块和功能。在整篇文章中,我们将提供详细的解释和代码片段,以确保清晰的理解。重新启动计算机的重要性重新启动计算机是基本的故障排除步骤,可

一. 什么是auto-py-to-exeauto-py-to-exe 是一个用于将Python程序打包成可执行文件的图形化工具。本文就是主要介绍如何使用 auto-py-to-exe 完成 python 程序打包。auto-py-to-exe 基于 pyinstaller ,相比于 pyinstaller ,它多了 GUI 界面,用起来更为简单方便二. 安装 auto-py-to-exe首先我们要确保我们的 python 环境要大于或等于 2.7 然后在 cmd 里面输入:pip install

适用于 Linux 的 Windows 子系统第一种选择是使用适用于 Linux 或 WSL 的 Windows 子系统,这是一个兼容层,用于在 Windows 系统上本地运行 Linux 二进制可执行文件。它适用于大多数场景,允许您在 Windows 11/10 中运行 shell 脚本。WSL 不会自动可用,因此您必须通过 Windows 设备的开发人员设置启用它。您可以通过转到设置 > 更新和安全 > 对于开发人员来完成。切换到开发人员模式并通过选择是确认提示。接下来,查找 W

我们为初学者设计了这份WindowsPowerShell脚本教程,无论您是技术爱好者还是希望提高脚本编写技能的专业人士。如果你对PowerShell脚本没有先验知识,这篇文章将从基础开始,为您量身定制。我们将帮助您掌握PowerShell环境的安装步骤,并逐步介绍PowerShell脚本的主要概念和功能。如果您已经做好准备,准备深入学习PowerShell脚本编程,那么让我们一起踏上这激动人心的学习之旅吧!什么是WindowsPowerShell?PowerShell是由微软开发的一个混合了命令
