チップス

シェルスクリプトで引数を使う


先日、動画変換のシェルスクリプトを見た時に、シェルスクリプトに引数を渡して処理出来るようにするといいな。と思ってシェルスクリプトに引数の処理をさせる方法をgoogle で検索してみました。
 
引数を処理する という投稿を参考にシェルスクリプトの引数の使い方をお勉強しました。
 

変数名 自動的に設定される値
$# 実行時に指定された引数の数を表す変数。
$ ./test.sh AAA BBB CCC」と実行された場合、シェルスクリプト test.sh 内で変数 $# を参照するとその値は 3 となる。
$@ シェルスクリプト実行時、もしくは set コマンド実行時に指定された全パラメータが設定される変数。
変数 $* と基本的に同じだが、 "" で囲んだときの動作が異なる。
$* シェルスクリプト実行時、もしくは set コマンド実行時に指定された全パラメータが設定される変数。
変数 $@ と基本的に同じだが、 "" で囲んだときの動作が異なる。
$0 実行時のコマンド名が設定される変数。
./test.sh」と実行した場合には「./test.sh」が、「/home/user/test.sh」と実行した場合には「/home/user/test.sh」が設定される。
$1 ~ $n シェルスクリプト実行時に指定した引数の値がそれぞれ設定される変数。
1番目に指定した引数は $1 に、2番目に指定した引数は $2 に、n 番目に指定した引数は $n に設定される。10番目以降の引数参照時は ${10} のように「{}」を使用する必要がある。これは 「$10」 を 「$1 "0"」 のように、シェルに誤った解釈をされるのを防ぐためである。

 
シェルスクリプトで引数を使ってみる
  

#!/bin/sh

if [ $# -ne 2]; then
    echo "引数の数が違います" 1>&2
    exit 1
fi

# ヒアドキュメントを使って引数、メッセージを表示する
cat <<__EOT__
引数の数は
    $#
第1引数は
    $1
第2引数は
    $2
でした。
__EOT__

exit 0

シェルスクリプトで引数を使えるようになると、色々と便利ですね。
 
参考にさせていただいた 引数を処理するでは、getoptsコマンドを使ってオプション解析をする方法なども掲載されていて、勉強になりました。
 
参考URL

  1. 引数を処理する

   チップス