自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

格式化 Shell 腳本利器,輕松理解復(fù)雜代碼

系統(tǒng) Linux
格式化腳本很有必要,可以極大地有助于理解復(fù)雜的代碼。然而,對于那些經(jīng)常編寫 shell 腳本的人來說,重復(fù)檢查格式可能會成為一項乏味的任務(wù)。本文將向您展示如何使用 shfmt 來簡化工作!

什么是shfmt?

shfmt 由 Dustin Krysak 開發(fā),是一個 Shell 格式化程序、解析器和解釋器。該項目本身托管在 GitHub 上,并有一個清晰的 README 和清晰的存儲庫。該工具是用 Go 開發(fā)的,支持 POSIX、Bash 和 mksh shell。這使得 shfmt 成為一個真正通用的程序,而不是僅限于 Bash。

安裝shfmt

要在支持 snap 的 Linux 發(fā)行版(如 Ubuntu 和 Mint)上安裝shfmt,請在終端中執(zhí)行以下命令:

linuxmi@linuxmi:~/www.linuxmi.com$ sudo snap install shfmt

要在基于 RedHat/Yum 的 Linux 發(fā)行版(如 RHEL、Centos 和 Fedora)上安裝shfmt,請在終端中執(zhí)行以下命令:

注意:在執(zhí)行第一個命令后和執(zhí)行下一個命令之前,您必須重新啟動計算機(或注銷并重新登錄)。

sudo dnf install snapd
sudo snap install snap-store
sudo snap install shfmt

在 RHEL 和 Centos 上,您可能還必須先安裝EPEL 存儲庫。

使用 shfmt

安裝 snap 包后,您可以開始使用 shfmt。

linuxmi@linuxmi:~/www.linuxmi.com$ shfmt --help

讓我們先定義一個非常糟糕的格式和編寫的腳本,linuxmi.com.sh如下圖所示。

這個腳本有幾個問題,最突出的是它的格式。但是腳本中也有一個error/bug:func最后一行的函數(shù)調(diào)用后面跟著括號。Bash 中的函數(shù)調(diào)用(而不是函數(shù)定義)應(yīng)該只有名稱,而不是括號。

讓我們看看shfmt對此有何看法。

linuxmi@linuxmi:~/www.linuxmi.com$ shfmt linuxmi.sh

雖然輸出看起來有點晦澀,但請注意術(shù)語foo(此處使用)和bar(現(xiàn)在此處未使用)經(jīng)常在 IT 圈子中用于indicate/represent 任何類似的習(xí)語或元素。foo這里真的是指func。

即便如此,該消息仍然有點晦澀,最后一行,真正發(fā)生的是函數(shù)定義(而不是函數(shù)調(diào)用)的開始,因為包含了兩個括號。這就解釋了為什么該消息告訴我們需要更多的東西;后面必須有一個聲明。shmft在這里尋找類似func(){ some_command[s]; }的東西。

答對了!這增加了shfmt作為 shell 腳本驗證/檢查器工具的功能,非常方便!

我們修復(fù)了我們剛才的錯誤,現(xiàn)在輸入腳本linuxmi.sh如下圖所示。

我們再次對代碼執(zhí)行shfmt并收到更合適且格式正確的輸出:

太好了?,F(xiàn)在,我們可以更進一步,并告訴shfmt我們希望使用兩個空格的縮進/制表符寬度而不是完整的制表符。我總是使用兩個空格作為縮進/制表符寬度來編寫代碼,并在下一行的命令與前一行密切相關(guān)的地方使用額外的空格,比如一個連續(xù)的命令等等,盡管這種情況并不經(jīng)常發(fā)生。多年來,我發(fā)現(xiàn)這兩個空間是個人和共享項目的理想選擇。

每個人和每個項目都必須找到自己理想的語法,但請注意,如果您使用像shfmt上面示例中呈現(xiàn)的格式那樣的大制表符(8 個空格),您的代碼可能會變得更難閱讀。

我們將使用-i選項將縮進/制表符寬度設(shè)置為兩個空格(--help定義為縮進:0 表示制表符(默認),>0 表示空格數(shù)):shfmt -i 2 linuxmi.sh這將上圖中的腳本呈現(xiàn)如下圖。

太棒了!然而,我們注意到,我們故意犯的錯誤shfmt并沒有檢測到:#!/bin/bash__是不正確,應(yīng)該使用#!/bin/bash代替。

因此,除了使用shfmt更好地格式化腳本之外,還有使用shellcheck來查找腳本錯誤的用例。(見:https://www.linuxmi.com/shellcheck-bugs-linux-shell.html)。然而,有趣的是,在這種特殊情況下,甚至shellcheck沒有注意到這個問題。這個缺陷已報告給 shellcheck 團隊,因此可能會在適當?shù)臅r候得到修復(fù)。

總結(jié)

當您使用像shfmt這樣的shell 格式化工具(如shellcheck)這樣的bug/錯誤檢查器時,編寫干凈、格式良好、沒有bug的腳本就變得很容易了。正如我們所看到的,有些事情可能直到第一次運行腳本時才被注意到。shfmt是一個小而有效的工具,它將幫助您根據(jù)您選擇的縮進格式化您的腳本和代碼。

好好享受吧。

責(zé)任編輯:龐桂玉 來源: Linux公社
相關(guān)推薦

2015-08-10 14:42:40

Explain SheShell 命令

2012-05-16 09:14:11

代碼美化代碼工具Java

2010-07-29 11:03:53

Flex代碼格式化

2015-01-07 15:21:30

Android Stu代碼格式化

2023-12-05 18:04:58

PyCharmPython

2012-04-26 14:02:58

ibmdw

2009-02-26 16:56:07

虛擬化ITVMware

2010-08-03 10:46:41

Flex代碼格式化

2009-09-04 13:19:59

C#代碼格式化

2022-03-10 10:24:45

Vim代碼Linux

2020-11-03 10:21:33

MySQL

2023-11-01 13:37:38

Golang代碼

2010-08-02 16:25:03

ibmdwJDT

2010-07-08 16:21:46

Sql Server

2009-08-03 14:25:59

C#日期格式化

2014-08-20 10:13:33

虛擬化

2024-04-11 13:51:47

markdown前端

2024-01-08 22:03:22

python代碼開發(fā)

2022-05-09 08:17:37

InstantJava字符

2012-03-22 09:15:29

開發(fā)代碼
點贊
收藏

51CTO技術(shù)棧公眾號