Linux で効果的な Bash スクリプトを作成するための 10 の役立つヒント
シェル スクリプトは、Linux で学習/実行できる最も簡単なプログラミング形式です。さらに、ほんの数例ですが、タスクを自動化したり、新しいシンプルなユーティリティ/ツールを開発したりするためのシステム管理に必要なスキルです。
この記事では、効果的で信頼性の高い bash スクリプトを作成するための 10 の便利で実践的なヒントを紹介します。そのヒントには次のものが含まれます。
1. スクリプトでは常にコメントを使用する
これは、シェル スクリプトだけでなく、他のすべての種類のプログラミングにも適用される推奨される方法です。スクリプトにコメントを記述すると、スクリプトを実行するあなたや他の人が、スクリプトのさまざまな部分が何を行うかを理解するのに役立ちます。
まず、コメントは #
記号を使用して定義します。
#TecMint is the best site for all kind of Linux articles
2. 失敗時にスクリプトを終了させる
場合によっては、特定のコマンドが失敗した場合でも bash がスクリプトの実行を継続し、スクリプトの残りの部分に影響を与えることがあります (最終的には論理エラーが発生する可能性があります)。コマンドが失敗した場合にスクリプトを終了するには、次の行を使用します。
#let script exit if a command fails
set -o errexit
OR
set -e
3. Bash が宣言されていない変数を使用するときにスクリプトを終了させる
Bash は、論理エラーを引き起こす可能性のある宣言されていないスクリプトを使用しようとすることもあります。したがって、宣言されていない変数を使用しようとしたときにスクリプトを終了するように bash に指示するには、次の行を使用します。
#let script exit if an unsed variable is used
set -o nounset
OR
set -u
4. 二重引用符を使用して変数を参照する
(変数の値を使用して) 参照するときに二重引用符を使用すると、単語の分割 (空白に関する) や不必要なグロビング (ワイルドカードの認識と展開) を防ぐことができます。
以下の例を確認してください。
#!/bin/bash
#let script exit if a command fails
set -o errexit
#let script exit if an unsed variable is used
set -o nounset
echo "Names without double quotes"
echo
names="Tecmint FOSSMint Linusay"
for name in $names; do
echo "$name"
done
echo
echo "Names with double quotes"
echo
for name in "$names"; do
echo "$name"
done
exit 0
ファイルを保存して終了し、次のように実行します。
./names.sh
5. スクリプトで関数を使用する
非常に小さなスクリプト (数行のコード) を除いて、関数を使用してコードをモジュール化し、スクリプトを読みやすく再利用しやすくすることを常に忘れないでください。
関数を記述するための構文は次のとおりです。
function check_root(){
command1;
command2;
}
OR
check_root(){
command1;
command2;
}
単一行コードの場合は、次のように各コマンドの後に終了文字を使用します。
check_root(){ command1; command2; }
6. 文字列比較には == の代わりに=を使用します
==
は =
の同義語であるため、文字列比較には単一の =
のみを使用することに注意してください。たとえば、次のようになります。
value1=”linux-console.net”
value2=”fossmint.com”
if [ "$value1" = "$value2" ]
7. 置換には従来の「コマンド」の代わりに $ (コマンド) を使用します。
コマンド置換では、コマンドがその出力に置き換えられます。コマンドの置換には、バッククオート `command`
の代わりに $ (command)
を使用します。
これは、shellcheck ツールでも推奨されています (シェル スクリプトの警告と提案を表示します)。例えば:
user=`echo “$UID”`
user=$(echo “$UID”)
8. 読み取り専用を使用して静的変数を宣言する
静的変数は変化しません。スクリプトで定義すると、その値を変更することはできません。
readonly passwd_file=”/etc/passwd”
readonly group_file=”/etc/group”
9. 環境変数には大文字の名前を使用し、カスタム変数には小文字の名前を使用します
すべての bash 環境変数は大文字で名前が付けられているため、変数名の競合を避けるためにカスタム変数の名前には小文字を使用してください。
#define custom variables using lowercase and use uppercase for env variables
nikto_file=”$HOME/Downloads/nikto-master/program/nikto.pl”
perl “$nikto_file” -h “$1”
10. 長いスクリプトのデバッグを常に実行する
数千行のコードを含む bash スクリプトを作成している場合、エラーを見つけるのは悪夢になる可能性があります。スクリプトを実行する前に問題を簡単に修正するには、デバッグを実行します。以下のガイドを読んで、このヒントをマスターしてください。
- Linux でシェル スクリプト デバッグ モードを有効にする方法
- シェル スクリプトで構文チェック デバッグ モードを実行する方法
- シェル トレースを使用してシェル スクリプトのコマンドの実行をトレースする方法
それだけです!他に共有できる bash スクリプトのベスト プラクティスはありますか? 「はい」の場合は、以下のコメント フォームを使用してください。