検索
連載

シェルスクリプトに挑戦しよう(6)スクリプトで引数を使用する[その2]“応用力”をつけるためのLinux再入門(26)(2/2 ページ)

シェルスクリプトでは、単にコマンドを実行するだけではなく、条件によって処理を変えたり、繰り返し処理を行ったり、また、通常のコマンドのように引数を受け取って、引数に応じた処理を行ったりすることができます。前回に続き、今回もシェルスクリプトで「引数」を扱う方法を解説します。

Share
Tweet
LINE
Hatena
前のページへ |       

●コメントアウトの活用

 変数の内容を確認したら、確認用の行を削除するのではなく、行の先頭に「#」記号を入れておくとよいでしょう。「#」以降はコメント扱いになるため、実行されなくなります(本連載第22回参照)。また、確認したくなったら「#」を削除します。

 このように、スクリプトの中のコマンド行を、「#」でコメント扱いにして一時的に無効にすることを“コメントアウトする”といいます。

#echo "ptn:$ptn file:$file dir:$dir"		#変数の内容を確認
grep -Hn -e "$ptn" -r --include="$file" "$dir"
▲確認用の行をコメントアウトしておく(grepallを加工)

●スクリプト名を参照して使用方法を表示する

 さて、先ほどのgrepallでは、1つ目の引数(検索文字列)が指定されていなかったら、すぐに「exit」で終了しています。しかし、何も表示しないで終了すると、何も見つからなかったのか、それとも使い方が違っていたのかどうかが分かりません。

 そこで、1つ目の引数が指定されていなかったら、使い方を表示するようにしてみましょう。以下の例では入力しやすいように英文字だけを使用していますが、もちろん、日本語でも構いません。

 ここでは、使用方法として「USAGE: $0 pattern [file] [dir]」のように、スクリプト名を直接書かずに「$0」で参照しています。このようにしておくことで、今後スクリプト名を変更しても、使い方を表示している箇所を変更する必要がなくなります。

#! /bin/bash
if [ -n "$1" ]		#1つ目の引数が指定されている?
then
  ptn="$1"
else
  echo "USAGE: $0 pattern [file] [dir]"		#使用方法を表示
  exit
fi
(以下は同じ)
▲1つ目の引数が指定されていなかったら使用方法を表示する(grepallを加工)

●ファイル名からパス名を取り除く(basename)

 「echo $0」のように「$0」をそのまま出力すると、例えば「./grepall」のようにパス付きで実行している場合、使用方法も「USAGE: ./grepall …」のようにパス付きで表示されてしまいます。

 常にファイル名だけを表示するようにしたい場合は、「basename」コマンドと組み合わせます。basenameは「basename ファイル名」で、ファイル名からパス名部分(「/」記号より前の部分)を取り除くことができるコマンドです。逆に、パス名部分だけを取り出したい場合は「dirname」コマンドを使います。「dirname ファイル名」でファイルのパス名だけが表示されます。

 今回の場合、「basename $0」の結果をechoコマンドで表示したいのでバッククオートを使用しています。

#! /bin/bash
if [ -n "$1" ]		#1つ目の引数が指定されている?
then
  ptn=$1
else
  echo "USAGE: `basename $0` pattern [file] [dir]"
  exit
fi
if [ -n "$2" ]		#2つ目の引数が指定されている?
then
  file="$2"		#指定されていれば変数fileに保存
else
  file="*"		#指定されていなかったら"*"(全てのファイル)を対象にする
fi
if [ -n "$3" ]		#3つ目の引数が指定されている?
then
  dir="$3"		#指定されていれば変数dirに保存
else
  dir="."		#指定されていなかったらカレントディレクトリを対象にする
fi
#echo "ptn:$ptn file:$file dir:$dir"		#変数の内容を確認
grep -Hn -e "$ptn" -r --include="$file" "$dir"
▲「$0」からパス名を取り除いて表示する(grepallを加工)
$ ./grepall
USAGE: grepall pattern [file] [dir]
▲実行結果(grepallを引数なしで実行)

筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る