シェルスクリプトを使うべきではないケース
大規模システムのプログラミング
高速性が必要な処理
シェルスクリプトの活用
シェルスクリプトでは、シェルのさまざまな機能を使いながら、既存のコマンドを組み合わせ、さまざまな問題が解決できます。
シェルスクリプトを作るときのコツは、小さく作っていくことです。
いきなり何でもできるような大規模なものは考えるのはNGです。
変数の有効範囲
localで変数の有効範囲を限定できます。
不用意に変数の値を書き換えると、関数の外にまで影響を及ぼしてしまうため、localで限定的にします。
シェルスクリプト全体で有効な変数のことを、グローバル変数と呼びます。
グローバル変数は有効範囲が広すぎるため、極力利用を避けるのが望ましい書き方です。
シェル関数の中でだけ自分自身を呼び出して、入れ子のように処理を行う方法を「再帰呼び出し」と呼びます。
bashのパラメータ展開
${変数名#パターン}:最短マッチで、パターンに前方一致した部分を取り除く
${変数名##パターン}:最長マッチで、パターンに前方一致した部分を取り除く
${変数名%パターン}:最短マッチで、パターンに後方一致した部分を取り除く
${変数名%%パターン}:最長マッチで、パターンに後方一致した部分を取り除く
環境変数
bashにはIFSという環境変数があり、この変数にはbashが単語の区切りとして解釈する文字が格納されています。
IFSのデフォルト値では、「sp:スペース」「ht:タブ」「nl:改行」の3つを、単語の区切りとみなします。
「スペース」で区切らせないようにIFSの値からスペースを抜いておく手法がよく使われます。
vimのスクリプト内で、IFS=$\n’でOKです。
xargsコマンド
たくさんのファイルに対して一括処理をするためによく使われるコマンドです。
findコマンドとセットでよく使われます。
標準入力からコマンドラインを組み立て実行します。
橋渡し的な存在です。
findコマンドとセットでxargesコマンドを利用すれば、サブディレクトリ内のファイルまで含めてすべてのファイルに対して任意のコマンドを実行できます。
basenameコマンド
特殊パラメータ$0からシェルスクリプトのファイル名を所得します。
入力:$basename”/home/kal/bin/findgrep.sh”
結果:findgrep.sh
「<<」ヒアドキュメント
複数行のテキストをシェルスクリプトにそのまま記述したいときに使います。
[ヒアドキュメントの書き方]
コマンド << 終了文字列
ヒアドキュメントの内容
終了文字列
ヒアドキュメントの内容は、コマンドの標準入力にそのまま渡されます。
標準出力にはコマンド本来の結果を表示し、標準エラー出力にはエラーメッセージを表示するという使い方をキチンと理解しよう。
Linuxコマンドの基本「余計なメッセージは出力しない」という設計思想に基づき、「ファイルがありません」のようなメッセージ表示はやめましょう。
コメント