例題 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 行が(ダイジェストのかたちで)表示される. |