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

» 2018年10月17日 05時00分 公開
[西村めぐみ@IT]
前のページへ 1|2       

●コメントアウトの活用

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

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

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

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

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

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

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

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

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

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

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

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

  1. #! /bin/bash
  2. if [ -n "$1" ] #1つ目の引数が指定されている?
  3. then
  4. ptn=$1
  5. else
  6. echo "USAGE: `basename $0` pattern [file] [dir]"
  7. exit
  8. fi
  9. if [ -n "$2" ] #2つ目の引数が指定されている?
  10. then
  11. file="$2" #指定されていれば変数fileに保存
  12. else
  13. file="*" #指定されていなかったら"*"(全てのファイル)を対象にする
  14. fi
  15. if [ -n "$3" ] #3つ目の引数が指定されている?
  16. then
  17. dir="$3" #指定されていれば変数dirに保存
  18. else
  19. dir="." #指定されていなかったらカレントディレクトリを対象にする
  20. fi
  21. #echo "ptn:$ptn file:$file dir:$dir" #変数の内容を確認
  22. grep -Hn -e "$ptn" -r --include="$file" "$dir"
▲「$0」からパス名を取り除いて表示する(grepallを加工)
  1. $ ./grepall
  2. 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ラーニング指導を担当。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

Linux �ス�ス OSS 髫ェ蛟�スコ荵斟帷ケ晢スウ郢ァ�ュ郢晢スウ郢ァ�ー

隴幢スャ隴鯉ス・隴帷」ッ菫」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。