例題 2ファイル(ただし,テキストファイルに限る)が与えられると, そのファイル名,先頭と末尾の内容(三行ずつ)を表示するスクリプトを作りなさい.
(実行例) 解答例digest.sh の内容は以下の通り:echo "=== $1 ===" head -n 3 $1 echo echo "....." echo tail -n 3 $1 解説上記の内容を digest.sh として作成し,bash digest.sh xxx yyy zzzという具合いに実行させると,コマンドライン引数 xxx, yyy 及び zzz はそれぞれ自動的にシェルスクリプト内の特別な変数へ記録され, 順番に $1, $2 及び $3 として参照できる. つまり,シェルスクリプトの中では, n 番目のコマンドライン引数を $n として参照 できる. この仕組みを利用して,スクリプト内では三種類のコマンドを活用している:
echo "=== $1 ==="これにより,コマンドライン引数で 1 番目に与えられたファイル名が === で囲まれて出力される. 仮にこのスクリプトを bash digest.sh foo.cという具合いに実行すれば, $1 は foo.c に置き換わる. (2)2 行目では head コマンドを使って目的のファイル($1)の先頭から 3 行を出力している:
head -n 3 $1
(3)3 〜 5 行目では再び echo コマンドを使って, 「途中が省略されていること」を表現している: echo echo "....." echoなお,echo のみを書いた場合は何も出力せずに改行だけが行われる. (4)最後の行では tail コマンドを使って目的のファイル($1)の末尾から 3 行を出力している:
tail -n 3 $1
ゆえに,上の解答例に示したスクリプトを実行すると, コマンドライン引数で与えられたファイルの先頭と末尾の 3 行が(ダイジェストのかたちで)表示される. |