LinuCレベル1 102試験の例題と解説

1.06.2シェルスクリプト

LinuCレベル1 102試験の出題範囲から、「1.06.2 シェルスクリプト」についての例題を解いてみます。
ここでは、シェルスクリプトの定義済み変数について確認しておきましょう。

Linucレベル1 102試験 出題範囲


例題

シェルスクリプトで利用できる変数の説明として正しいものを選択してください。

  1. $@ … 最後に実行したコマンドの結果
  2. $# … すべての引数
  3. $0 … プログラム名
  4. $? … 引数の個数

※この例題は実際の試験問題とは異なります。


解答と解説

正解は、「3. $0 … プログラム名」です。

シェルスクリプトには、引数などを扱うことのできる定義済みの変数があります。
主な変数は以下の通りです。

$0プログラム名
$11番目の引数
$nn番目の引数
$@すべての引数
$#引数の個数
$?最後に実行したコマンドの返り値
$$実行中のシェルのプロセスID

それぞれの変数をechoコマンドで表示するシェルスクリプト(test.sh)を作成してみます。

#!/bin/bash

echo '$0 = '$0
echo '$1 = '$1
echo '$3 = '$3
echo '$@ = '$@
echo '$# = '$#
echo '$? = '$?
echo '$$ = '$$

作成したシェルスクリプト(test.sh)にいくつか引数を指定して実行してみます。

$ ./test.sh aaa bbb ccc 11 22 33

結果は以下のように表示されます。

$0 = ./test.sh
$1 = aaa
$3 = ccc
$@ = aaa bbb ccc 11 22 33
$# = 6
$? = 0
$$ = 30899

それでは選択肢を見ていきます。

1.$@ … 最後に実行したコマンドの結果
不正解です。

$@はすべての引数を扱う変数です。
解説で作成したシェルスクリプト(test.sh)の出力結果の通り、プログラムに指定した引数がすべて格納されます。

2.$# … すべての引数
不正解です。

$#は引数の個数を扱う変数です。
解説で作成したシェルスクリプト(test.sh)の出力結果の通り、プログラムに指定した引数の数が格納されます。

3.$0 … プログラム名
正解です。

$0は、0番目の引数、つまりプログラム名を扱う変数です。
解説で作成したシェルスクリプト(test.sh)の出力結果の通り、プログラム名が格納されます。

4.$? … 引数の個数
不正解です。

$?は、最後に実行したコマンドの返り値を扱う変数です。
コマンドが成功した場合は、0が返ります。コマンドが失敗した場合は、0以外の数値で、1またはエラーコードなどが格納されます。

これらの変数は、引数によって処理を変えたいときなどに非常に便利です。
必要に応じて利用できるようにしておきましょう。


例題作成者

株式会社デージーネット OSS研究室 橋本 知里

ページトップへ