五個鮮為人知的現代 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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

自動化和任務調度在簡化軟體開發中的重複任務方面發揮著至關重要的作用。想像一下,有一個Python腳本需要每5分鐘執行一次,例如從API取得資料、執行資料處理或發送定期更新。如此頻繁地手動運行腳本可能非常耗時且容易出錯。這就是任務調度的用武之地。在這篇文章中,我們將探討如何安排Python腳本每5分鐘執行一次,確保它自動運行而無需手動幹預。我們將討論可用於實現此目標的不同方法和程式庫,使您能夠有效地自動化任務。使用time.sleep()函數每5分鐘運行一次Python腳本的簡單方法是利用tim

如何在Linux系統中執行.sh檔?在Linux系統中,.sh文件是一種被稱為Shell腳本的文件,用於執行一系列的命令。執行.sh檔案是非常常見的操作,本文將介紹如何在Linux系統中執行.sh文件,並提供具體的程式碼範例。方法一:使用絕對路徑執行.sh文件要在Linux系統中執行一個.sh文件,可以使用絕對路徑來指定該文件的位置。以下是具體的步驟:打開終

在當今快節奏的數位世界中,能夠自動執行電腦任務可以大大提高生產力和便利性。其中一項任務是關閉計算機,如果手動完成,這可能會非常耗時。值得慶幸的是,Python為我們提供了一套強大的工具來與系統互動並自動執行此類任務。在這篇文章中,我們將探討如何撰寫Python腳本來輕鬆關閉電腦。無論您是想安排自動關機、遠端啟動關機,還是只是透過避免手動關機來節省時間,此腳本都會派上用場。導入所需的模組在開始編寫腳本之前,我們需要導入必要的模組,以便與系統互動並執行關閉命令。在本節中,我們將導入os模組(它

剪映是影片編輯工具,具有全面的剪輯功能,支援變速,有多元濾鏡和美顏的效果,還有豐富的曲庫資源。在這款軟體中,可以直接對影片進行剪輯,也可以建立剪輯腳本,但是該怎麼操作呢?本篇教學小編就來介紹一下剪映製作腳本的方法。 製作方法 1、在電腦中點選開啟剪映軟體,然後找到「創作腳本」選項,點選開啟。 2、在創作腳本頁面中,輸入“腳本標題”,然後在大綱中輸入拍攝內容的簡介。 3、如何在大綱中就能看到「分鏡描述」選項,在框內可以

重新啟動電腦是一項常見任務,我們經常執行此任務來解決問題、安裝更新或應用系統變更。雖然重新啟動電腦的方法有很多種,但使用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

Python 腳本部分範例:企業微信警告、FTP 用戶端、SSH 用戶端、Saltstack 用戶端、vCenter 用戶端、取得網域名稱ssl 憑證過期時間、傳送今天的天氣預報以及未來的天氣趨勢圖;Shell 腳本部分實例:SVN完整備份、Zabbix 監控使用者密碼過期、建置本地YUM 以及上篇文章中有讀者的需求(負載高時,查出佔用比較高的進程腳本並儲存或推播通知);篇幅有些長,也請大家耐心翻到文末,畢竟有彩蛋。 Python 腳本部分企業微信警告此腳本透過企業微信應用,進行微信告警,可用於
