はじめに
こんにちは、TIGの尾崎です。シェルスクリプト連載の6日目です。
突然ですが、みなさんは「あんなコマンドあったらいいのにな」と思ったことはありませんか。
めったにないと思いますが、せっかくなので本日はオリジナルコマンドの作成方法を記します。
それではいきましょう。
オプションなしのコマンドを作成
手始めに以下のようなシンプルなオプションなしのコマンドを作成します。
- 引数を標準出力させる
- 引数がない場合、もしくは引数が複数の場合はエラーを出力させる
シェルスクリプトtestcommand
を作成します。
作成するディレクトリはどこでも良いです。
ちなみにファイル名がそのままコマンド名になります。
vim $HOME/command/testcommand |
#!/bin/bash |
このままではコマンドを実行できないので、$HOME/command
にPATHを通します。.bash_profile
に以下を記述します。
vim ~/.bash_profile |
export PATH=$HOME/command:$PATH |
続いて、以下を実行します。
source ~/.bash_profile |
PATHが通ったので、作成したコマンドtestcommand
を以下の3パターンで実行します。
- 引数なし
- 引数が複数
- 引数が1つ
# 1. 引数なし |
期待通りの結果が得られました。
が、これは以下を実行しているのと特に変わりないですね。
sh testcommand |
次はオプション付きのコマンドを作成します。
オプション付きのコマンドを作成
続いて以下のようなシンプルなオプション付きのコマンドを作成します。
- コマンド名を標準出力させる
-a
の場合はdate
コマンドを実行する-b
の場合は引数を標準出力させる-h
、もしくは存在しないオプションの場合はコマンドの使用方法を標準出力させる
先ほどのtestcommand
を以下のように書き換え、オプションを処理できるようにします。
vim $HOME/command/testcommand |
|
getoptsコマンドの引数、":ab:h"
の部分について補足します。
用意したオプションについて、引数が必要なものはうしろに:
をつけてすべてのオプションを並べます。
先頭の:
は、存在しないオプションが実行された際のエラーメッセージを非表示にできます。
では、作成したコマンドを以下の6パターンで実行します。
- オプションなし
- オプション
-a
のみ - オプション
-b
のみ - オプション
-a
と-b
- オプション
-h
- オプション
-c
# 1. オプションなし |
オプション付きコマンドの場合も期待通りの結果が得られました。
さいごに
今回作成したコマンドはまったく実用性がありませんが、便利なコマンドを思いついた方はぜひ作成してみてはいかがでしょうか。
シェルスクリプト連載の6日目でした。明日は岸本卓也さんのBashのシェル展開についてです。