■ はじめに
https://dk521123.hatenablog.com/entry/2024/03/26/143803
で、シェルスクリプトの lint ツール「ShellCheck」の調査の過程で 「shfmt」ってのが、見つかったのでメモ。
目次
【1】shfmt 【2】インストール 【3】実行例 1)Options 【4】Hello World 1)コマンド例 2)補足解説
【1】shfmt
* シェルスクリプトの Formatter ツール
https://github.com/patrickvane/shfmt
【2】インストール
* 以下に記載されている
# powershell で以下を実行 curl.exe https://webi.ms/shfmt | powershell # 確認 shfmt --version v3.8.0
curl -sS https://webi.sh/shfmt | sh # or sudo apt install shfmt # 確認 shfmt --version
【3】実行例
shfmt -i 2 -w test.sh
1)Options
Options | Explanations |
---|---|
-i [Number] | インデント数(i=indent)を指定。デフォルトは「indent: 0 for tabs」 |
-w | 上書き指定(w=Write?) |
-d | 差分をエラー表示 |
-ln [Shell] | シェルの指定(bash/posix/mksh/bats, default "bash") |
* 上記以外の詳細は、「shfmt -h」又は「man shfmt」でみた方が良さそう
【4】Hello World
* 以下のシェルを掛けてみる * なお、以下のシェルは、以下の関連記事の「ShellCheck」で修正したもの。
https://dk521123.hatenablog.com/entry/2024/03/26/143803
【フォーマッタ前】test.sh
#!/bin/bash if command -v sqlfmt then echo "Found sqlfmt" which sqlfmt sqlfmt --version else echo "sqlfmt is not supported in your env..." fi
1)コマンド例
# 比較するためにバックアップ cp test.sh test_ori.sh # 実行 shfmt -i 2 -w test.sh # 比較 diff test_ori.sh test.sh 3,4c3 < if command -v sqlfmt < then --- > if command -v sqlfmt; then
2)補足解説
* 上記の diff でみた通り、「修正前」「修正後」と if 文の書き方が変わった * なお、前述したが「ShellCheck」では通過しているものだったので コード統一を図るためにも「ShellCheck」「shfmt」両方使った方が良さそう
修正前
if command -v sqlfmt then
修正後
if command -v sqlfmt; then
参考文献
https://yossi-note.com/introduction-to-bash-formatting-with-shfmt/
関連記事
シェル ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
ShellCheck ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/03/26/143803