
シェルスクリプトの作成は魅力的です。 コマンドラインスクリプトは、日常のアクティビティを自動化するのに役立ちます。 美しいもの(またはある種のマック)を作成できますが、実際に何かを作成する場合は、プログラマーが必要とするとおりにコードが取得されることを確認しておくと便利です。 うまく書かれていないスクリプトは危険です。 ほとんどの初心者は、StackOverflowからコードスニペットをコピーするか、Googleで必要なものを見つけるか、LinuxのQ&A サイトを使用してスクリプトを作成します 。 このようなプログラミングへのアプローチは、低品質のコードとエラーの出現につながります。 たとえば、
VAR
変数が定義されていないため、実行すると災害につながる
rm
コマンドがあります。
rm -rf "/$VAR/*"
スクリプトの問題の多くは、Haskellで記述されたShellCheck静的コードアナライザーなどのリンターで解決できます。 スクリプトテキストのエラーを検索し、実行されたチェックに関するレポートを表示するのに役立ちます。 これにより、生産性とコード品質が向上します。 今日は、ShellCheckをLinuxおよびUnixライクなオペレーティングシステムにインストールして使用する方法について説明します。
設置
ShellCheckをローカルにインストールする最も簡単な方法は、ディストリビューションで使用されているパッケージマネージャー(apt / apt-get / yumなど)を使用することです。
DebianDebian / Ubuntu LinuxへのShellCheckのインストール
ここでは、次のapt / apt-getコマンドが必要です。
$ sudo apt install shellcheck
このコマンドに対するシステム応答の例を次に示します。
[sudo] password for vivek: Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: shellcheck 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 1,841 kB of archives. After this operation, 15.5 MB of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu artful/universe amd64 shellcheck amd64 0.4.6-1 [1,841 kB] Fetched 1,841 kB in 42s (43.4 kB/s) Selecting previously unselected package shellcheck. (Reading database ... 196100 files and directories currently installed.) Preparing to unpack .../shellcheck_0.4.6-1_amd64.deb ... Unpacking shellcheck (0.4.6-1) ... Setting up shellcheck (0.4.6-1) ... Processing triggers for man-db (2.7.6.1-2) ...
CentCentOS / RHEL / Fedora / Oracle LinuxにShellCheckをインストール
まず、CentOS / RHELでEPELリポジトリを有効にする必要があります 。
$ sudo yum -y install epel-release
次に、次のyumコマンドを入力します。
$ sudo yum install ShellCheck
このコマンドに応答して表示されるものは次のとおりです。
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.excellmedia.net * epel: mirror.nes.co.id * extras: mirrors.vonline.vn * updates: centos-hcm.viettelidc.com.vn Resolving Dependencies --> Running transaction check ---> Package ShellCheck.x86_64 0:0.3.5-1.el7 will be installed --> Processing Dependency: ghc(ShellCheck-0.3.5-297097a7f5fa37100847be7f096be51e) for package: ShellCheck-0.3.5-1.el7.x86_64 ..... .. ... Dependencies Resolved =============================================================================== Package Arch Version Repository Size =============================================================================== Installing: ShellCheck x86_64 0.3.5-1.el7 epel 495 k Installing for dependencies: ghc-ShellCheck x86_64 0.3.5-1.el7 epel 540 k ghc-array x86_64 0.4.0.1-26.4.el7 epel 113 k ghc-base x86_64 4.6.0.1-26.4.el7 epel 1.6 M ghc-bytestring x86_64 0.10.0.2-26.4.el7 epel 182 k ghc-containers x86_64 0.5.0.0-26.4.el7 epel 287 k ghc-deepseq x86_64 1.3.0.1-26.4.el7 epel 45 k ghc-directory x86_64 1.2.0.1-26.4.el7 epel 59 k ghc-filepath x86_64 1.3.0.1-26.4.el7 epel 60 k ghc-json x86_64 0.7-4.el7 epel 96 k ghc-mtl x86_64 2.1.2-27.el7 epel 33 k ghc-old-locale x86_64 1.0.0.5-26.4.el7 epel 50 k ghc-parsec x86_64 3.1.3-31.el7 epel 105 k ghc-pretty x86_64 1.1.1.0-26.4.el7 epel 57 k ghc-regex-base x86_64 0.93.2-29.el7 epel 28 k ghc-regex-compat x86_64 0.95.1-35.el7 epel 15 k ghc-regex-posix x86_64 0.95.2-30.el7 epel 47 k ghc-syb x86_64 0.4.0-35.el7 epel 39 k ghc-text x86_64 0.11.3.1-2.el7 epel 379 k ghc-time x86_64 1.4.0.1-26.4.el7 epel 187 k ghc-transformers x86_64 0.3.0.0-34.el7 epel 100 k ghc-unix x86_64 2.6.0.1-26.4.el7 epel 160 k Transaction Summary =============================================================================== Install 1 Package (+21 Dependent packages) Total download size: 4.6 M Installed size: 28 M Is this ok [y/d/N]: y Downloading packages: (1/22): ghc-bytestring-0.10.0.2-26.4.el7.x86_64.rpm | 182 kB 00:09 (2/22): ghc-array-0.4.0.1-26.4.el7.x86_64.rpm | 113 kB 00:09 .... .. ... ghc-parsec.x86_64 0:3.1.3-31.el7 ghc-pretty.x86_64 0:1.1.1.0-26.4.el7 ghc-regex-base.x86_64 0:0.93.2-29.el7 ghc-regex-compat.x86_64 0:0.95.1-35.el7 ghc-regex-posix.x86_64 0:0.95.2-30.el7 ghc-syb.x86_64 0:0.4.0-35.el7 ghc-text.x86_64 0:0.11.3.1-2.el7 ghc-time.x86_64 0:1.4.0.1-26.4.el7 ghc-transformers.x86_64 0:0.3.0.0-34.el7 ghc-unix.x86_64 0:2.6.0.1-26.4.el7 Complete!
Fedoraを使用する場合、次のdnfコマンドを実行します。
$ sudo dnf install ShellCheck
Arch Arch LinuxにShellCheckをインストールする
次のpacmanコマンドを入力します。
$ sudo pacman -S shellcheck
▍GentooLinuxへのShellCheckのインストール
emergeコマンドを入力してください:
$ sudo emerge --ask shellcheck
OpenOpenSUSE LinuxにShellCheckをインストールする
次のzypperコマンドを入力します。
$ sudo zypper in ShellCheck
ShellmacOS UnixにShellCheckをインストールする
MacPortsを使用している場合は、次のportコマンドを使用します。
$ port install shellcheck
macOS / OS XでHomebrewを使用する場合、次のようにbrewコマンドを入力します。
$ brew install shellcheck
ShellCheckの使用方法
スクリプトでShellCheckをテストします。スクリプトの内容は、 catコマンドを使用して検査されます。
$ cat -n backupme
彼のコードは次のとおりです。
#!/bin/bash t="/tmp/exclude.$$" source ~/.backup.conf >$t for w in $WHATNOT do echo $w >> $t done rsync $OPT -avr --exclude-from=$t $WHAT $SERVER:$WHERE rm -rf $t
次に、ShellCheckを使用してスクリプトを確認します。
$ shellcheck backupme
応答として、プログラムは次を表示します。

動作中のShellCheck
ShellCheckユーティリティは、引用符で囲まれていない変数の使用を修正することを提案し、他の問題も報告しました。 エラーを修正し、次のコマンドでスクリプトテキストを再度表示します。
$ cat -n backupme
結果は次のとおりです。
#!/bin/bash t="/tmp/exclude.$$" source ~/.backup.conf touch $t for w in $WHATNOT do echo "$w" >> $t done rsync "$OPT" -avr --exclude-from=$t "$WHAT" "$SERVER:$WHERE" rm -rf "$t"
テキストエディターでのShellCheckの統合
ShellCheckはvimまたはemacsに統合できます。その結果、エディターでスクリプトテキストを直接チェックします。 これは、プログラムをリントおよびビルドするための非同期ツールであるvim neomakeのプラグインの使用方法を示しています。
~/.vimrc
vim- plugin managerを使用してインストールされました:
call plug#begin('~/.vim/plugged') Plug 'pearofducks/ansible-vim' " install and use neomake linting Plug 'neomake/neomake' call plug#end()
ansible-vim
および
neomake/neomake
をインストールするには、vimで次のコマンドを入力します。
:PlugInstall
プラグインを使用するには、bash / shスクリプトの編集中に次のコマンドを入力します。
:Neomake
エディターでのプラグインの結果は次のとおりです。

NeomakeはShellCheckを使用して警告とエラーメッセージを表示します
まとめ
ShellCheckは、Linuxコマンドラインスクリプトを改善および修正できる優れたツールであると考えています。 コード内の多くの一般的な欠陥とエラーを検出できます。 SpellCheckの詳細については、プロジェクトサイト 、およびGitHubのリポジトリをご覧ください。
親愛なる読者! ShellCheckのようなものでスクリプトをチェックしますか?