【Linux】シェルスクリプト実行時に引数を渡す方法と返り値の使い方

シェルスクリプトに引数を渡すには、実行するファイル名の後ろに半角スペースを入れて値を記述します。

./dog.sh 柴犬 3

渡した値は、シェルスクリプト内で第1引数を$1、第2引数を$2として利用できます。

この記事では、シェルスクリプトに引数を渡して利用する方法と、引数の個数やコマンドの戻り値を確認する方法を、初心者向けに解説します。

引数とは

引数(パラメータとも呼ばれる)とはシェルスクリプト実行時に、シェルに渡される値のことです。作業者がシェルを実行しようとした際に任意の値をコマンド実行と同時に記述することでシェル内で引数を利用することができます。

通常のシェル実行コマンド

ubuntu@sample:~$ ./ファイル名.sh

※コードの見方
黄・・・入力したコマンド
青・・・ログインユーザー
紫・・・コメント
その他・・・コマンドのレスポンス

引数を渡してシェルを実行するコマンド

ubuntu@sample:~$ ./ファイル名.sh 引数

引数を記述する際には実行するファイル名に対して半角スペースで区切って記述します。引数の渡し方についての詳細は後述しますのでそちらをご覧ください。

引数の渡し方と利用方法について

引数の渡し方と利用方法について紹介していきます

引数の渡し方

シェル実行時の引数の渡し方について解説していきます

引数を渡すにはシェル実行時に下記のようにして記述します

ubuntu@sample:~$ ./ファイル名.sh 引数

また、複数の引数を渡したい場合には半角スペースで区切って記述することができます

ubuntu@sample:~$ ./ファイル名.sh 引数1 引数2 引数3

渡された引数は下記のように呼ばれます

  • 引数1 ⇒ 第一引数(第一パラメータとも呼ばれる)
  • 引数2 ⇒  第二引数
  • 引数3 ⇒ 第三引数

また、実行したシェルスクリプトのファイル名は、$0で確認できます。

引数の使い方

渡した引数の利用方法について解説していきます

まず、引数を渡したらそれぞれの引数は渡した順番ごとに特殊な変数に格納されます。

自動的に格納される変数は下記のとおりです。

  • 第一引数 ⇒ $1
  • 第二引数 ⇒  $2
  • 第三引数 ⇒ $3

ちなみに実行したファイル名は$0に格納されます

各変数に引数が格納されているので、後は通常の変数を利用するのと同じ要領で使用することができます。

ファイル:dog.sh

#!/bin/bash

echo "$1" "$2" "$3"    #第一引数から第三引数の値が出力される
echo "$0"          #実行したファイル名が出力される
exit 0

引数を指定して表示させる

ではこれまでの解説を踏まえて実際に引数を指定して出力していきます

使用するファイルは上記でも紹介したdog.shを使用します。記述内容はすでにお見せしていますが以下の通りです。

#!/bin/bash

echo "$1" "$2" "$3"    #第一引数から第三引数の値が出力される
echo "$0"          #実行したファイル名が出力される
exit 0

それでは引数を渡して出力結果を確認します

ubuntu@sample:~$ ./dog.sh 第一引数 第二引数 第三引数
第一引数 第二引数 第三引数
./dog.sh

シェルに渡した引数が出力されており、実行したファイルも確認できました。

空白を含む文字列を引数として渡す

柴犬 3歳のように空白を含む文字列をそのまま渡すと、空白の前後で別々の引数として扱われます。

空白を含む文字列を1つの引数として渡したい場合は、文字列をダブルクォーテーションで囲みます。

ubuntu@sample:~$ ./dog.sh "柴犬 3歳" オス 埼玉県

このように実行した場合、それぞれの変数には次の値が格納されます。

変数格納される値
$1柴犬 3歳
$2オス
$3埼玉県

柴犬 3歳をダブルクォーテーションで囲まなかった場合は、柴犬が第1引数、3歳が第2引数として扱われます。

引数に空白が含まれる可能性がある場合は、渡すときだけでなく、シェルスクリプト内で利用するときも"$1"のようにダブルクォーテーションで囲むようにしましょう。

引数の確認に使える特殊変数

シェルスクリプトでは、$1以外にもさまざまな情報を確認できます。

例えば、実行したファイル名は$0、渡された引数の個数は$#に入っています。
それぞれの書き方と、実際に確認できる内容は次のとおりです。

書き方確認できる内容実行コマンドが./dog.sh 柴犬 オスの場合
$0実行したシェルスクリプトの名前./dog.sh
$11番目に渡した値柴犬
$22番目に渡した値オス
$3$93番目から9番目までに渡した値今回は値なし
${10}以降10番目以降に渡した値今回は値なし
$#渡した引数の個数2
$@渡したすべての引数柴犬 オス
$?直前に実行したコマンドが成功したかどうかを表す数字成功した場合は通常0

$1の数字は、引数を渡した順番を表しています。1番目に渡した値は$1、2番目に渡した値は$2で確認できます。

第10引数を確認するときは、$10ではなく${10}と記述します。

$#$?については、実際のコードを使ってこのあと詳しく確認していきます。

渡された引数の個数を確認する($#)

$#を使うと、シェルスクリプトに渡された引数の個数を確認できます。

次のシェルスクリプトを使って、実際に確認してみましょう。

#!/bin/bash

echo "渡された引数の個数:$#"

dog.shに3つの引数を渡して実行します。

ubuntu@sample:~$ ./dog.sh 柴犬 オス 埼玉県
渡された引数の個数:3

柴犬オス埼玉県の3つを渡したため、$#の値は3になります。

引数を渡さなかった場合は、$#の値は0になります。

戻り値を確認する($?)

シェルスクリプトを利用する際に引数の利用だけではなくファイル内で別のシェルを実行する場面が多くあります。

そんな時に各ファイルの処理が正常に完了しているかを確認することができるのが”$?“です。

補足として戻り値を確認する$?の使い方について紹介していきます。

まず、dog.shファイルを以下のように書き換えます

#! /bin/bash

./error.sh

exit 0

こちらのファイルではerror.shというファイルを呼び出して実行するシンプルな内容となっています

新たにerror.shファイルを作成します。記述内容は以下の通りです

#! /bin/bash

cho "シーズー" 

echo $?

exit 0

通常、文字列を出力するときはechoコマンドを使用しますが、この例ではあえて先頭のeを省いてchoと記述しています。

choというコマンドは存在しないためエラーが発生し、その直後にecho $?を実行すると0以外の数字が表示されます。

実際に確認してみましょう。

ubuntu@sample:~$ ./dog.sh
./error.sh: 行 3: cho: コマンドが見つかりません
127

期待通りに0以外の数字である127が実行結果として表示されました。

タイトルとURLをコピーしました