Linuxで効果的なBashスクリプトを書くための実践テクニック10選
シェルスクリプトは、Linuxで学べる最も手軽なプログラミング手法のひとつです。システム管理におけるタスクの自動化や、簡単なユーティリティ・ツールの開発など、管理者にとって必須のスキルとも言えます。
本記事では、効果的かつ信頼性の高いbashスクリプトを書くために役立つ、実用的な10のヒントを紹介します。
1. スクリプトには必ずコメントを書く
これはシェルスクリプトに限らず、あらゆるプログラミングで推奨される基本プラクティスです。コメントを適切に記述しておけば、後から自分や他の人がスクリプトを読んだときに、各部分が何をしているのかを素早く理解できます。
コメントは # 記号で定義します。
#TecMintはLinux関連記事なら何でも揃う最高のサイト
2. コマンドが失敗したらスクリプトを終了させる
bashは、あるコマンドが失敗してもそのままスクリプトの実行を続けることがあります。これにより後続の処理に影響が出て、論理エラーにつながる可能性があります。コマンドが失敗した時点でスクリプトを終了させるには、次の行を追加します。
#コマンドが失敗したらスクリプトを終了する set -o errexit または set -e
3. 未宣言の変数を使用したらスクリプトを終了させる
同様に、bashは未宣言の変数を使おうとすることがあり、これも論理エラーの原因になります。未宣言の変数を使用しようとした時点でスクリプトを終了させるには、次のように指定します。
#未宣言の変数が使われたらスクリプトを終了する set -o nounset または set -u
4. 変数の参照にはダブルクォートを使う
変数を参照するときにダブルクォートで囲むと、空白による単語分割(word splitting)や、不要なグロブ展開(ワイルドカードの認識と展開)を防ぐことができます。
以下の例を見てみましょう。
#!/bin/bash
#コマンドが失敗したらスクリプトを終了する
set -o errexit
#未宣言の変数が使われたらスクリプトを終了する
set -o nounset
echo "ダブルクォートなしの場合"
echo
names="Tecmint FOSSMint Linusay"
for name in $names; do
echo "$name"
done
echo
echo "ダブルクォートありの場合"
echo
for name in "$names"; do
echo "$name"
done
exit 0
ファイルを保存して終了し、次のように実行します。
$ ./names.sh
5. スクリプト内で関数を使う
ごく短いスクリプト(数行程度)を除き、常に関数を使ってコードをモジュール化することを心がけましょう。可読性と再利用性が大きく向上します。
関数を定義する構文は以下の通りです。
function check_root(){
command1;
command2;
}
または
check_root(){
command1;
command2;
}
1行で書く場合は、各コマンドの後に終端文字(セミコロン)を付けて次のようにします。
check_root(){ command1; command2; }
6. 文字列比較には == ではなく = を使う
== は = の別名(シノニム)ですが、文字列比較には単一の = を使うのが確実です。例えば次のように書きます。
value1="tecmint.com" value2="fossmint.com" if [ "$value1" = "$value2" ]
7. コマンド置換には `command` ではなく $(command) を使う
コマンド置換とは、コマンドをその出力結果で置き換える機能です。バッククォート `command` の代わりに $(command) 形式を使いましょう。
これは静的解析ツールshellcheck(シェルスクリプトの警告や改善提案を表示してくれるツール)でも推奨されています。例:
user=`echo "$UID"` user=$(echo "$UID")
8. 静的な変数には readonly を使って宣言する
静的な変数は値が変わらないものです。スクリプト内で一度定義したら、その値は変更できません。
readonly passwd_file="/etc/passwd" readonly group_file="/etc/group"
9. 環境変数は大文字、独自の変数は小文字で命名する
すべてのbash環境変数は大文字で命名されているため、独自に定義する変数には小文字を使いましょう。変数名の衝突を避けることができます。
#独自の変数は小文字で定義し、環境変数は大文字を使う nikto_file="$HOME/Downloads/nikto-master/program/nikto.pl" perl "$nikto_file" -h "$1"
10. 長いスクリプトは必ずデバッグを行う
数千行にも及ぶbashスクリプトを書いていると、エラーの発見が悪夢のような作業になることがあります。実行前に問題を簡単に修正できるよう、デバッグを実施しましょう。以下のガイドを参考に、デバッグ技法を習得してください。
- Linuxでシェルスクリプトのデバッグモードを有効にする方法
- シェルスクリプトで構文チェックのデバッグモードを実行する方法
- シェルトレースを使ってシェルスクリプトのコマンド実行を追跡する方法
以上です! 他にもおすすめのbashスクリプティングのベストプラクティスがあれば、ぜひコメント欄で共有してください。
-
知っておくべき便利なLinux Bashコマンドラインショートカット徹底解説
この記事では、すべてのLinuxユーザーに役立つBashコマンドラインショートカットを多数紹介します。これらのショートカットを覚えておけば、過去に実行したコマンドの呼び出しや再実行、エディタの起動、コマンドライン上でのテキストの編集・削除・変換、カーソル移動、プロセス制御などを、素早く効率的に行えるようになります。 本記事は、コマンドラインの基本を学び始めたばかりのLinux初心者にとって特に有益ですが、中級者や上級者の方にとっても、意外と知られていない実用的なヒントが見つかるはずです。以下では、Bashのキーボードショートカットをカテゴリ別に分けて解説していきます。 エディタを起動する ター
-
iPhone Xを使いこなすための便利なテクニック9選
iPhone XはこれまでのiPhoneとはまったく異なるモデルで、ディスプレイ、顔認証、Animoji、そしてジェスチャー操作によってすべてをコントロールする、スマートフォンの新時代の幕開けを象徴する存在です。しかし、ホームボタンがないことに「不便そう」「難しそう」と感じる方も多いのではないでしょうか。変化に慣れるには時間がかかるものですが、より良い方向への進化であれば、その努力は十分に価値のあるものになります。 そこで本記事では、新しいiPhone Xを快適に使いこなすための隠れた便利機能やヒントをまとめました。ぜひ参考にして、より良いユーザー体験をお楽しみください。 Appleの未来型U