本文へスキップ
BecomeCoder

シェルスクリプトコース · 第3章 引数と入出力 · レッスン10

位置パラメータ ― $1 $2 で引数を受け取る

ブラウザで完結

導入

sh backup.sh logs のように、実行するときに値を渡したい。渡された値は、スクリプトの中で $1$2… という名前で待っています。これを 位置パラメータ と呼びます。

説明

渡された引数は、左から順に番号が振られます。

#!/bin/bash

echo "スクリプト名: $0"
echo "1つ目: $1"
echo "2つ目: $2"
echo "引数の数: $#"
echo "全部まとめて: $@"
書き方意味
$0スクリプト自身の名前
$1 $21つ目、2つ目…の引数
$#引数の個数
$@全部の引数(1つずつ別の値として)

このスクリプトは、下の端末から引数つきで実行します。

sh script.sh 東京 大阪

$#(個数)は、引数が足りないときに止めるために使います。引数を前提にしたスクリプトが、引数なしで走ると悲惨なことになるからです(rm -rf $1/rm -rf / になる、は実際に起きた事故です)。判定の書き方は第4章で扱いますが、まずは「個数を知る手段がある」ことを押さえてください。

flowchart LR
    A["sh script.sh 東京 大阪"] --> B["$0 = script.sh"]
    A --> C["$1 = 東京"]
    A --> D["$2 = 大阪"]
    A --> E["$# = 2"]

引数を使うときも、二重引用符で囲むのを忘れずに。"$1" と書いておけば、スペースを含むファイル名を渡されても壊れません。

やってみよう

まず引数なしで sh script.sh を実行し、$1 が空になることを確かめましょう。次に sh script.sh 東京 大阪 として、番号どおりに値が入ることを確認します。sh script.sh a b c d のように増やして、$# が変わることも見てください。

演習

sh script.sh 東京 大阪 を実行して、1つ目: 東京 と表示させてください。

ヒント1を見る

下の端末に sh script.sh 東京 大阪 と打ちます(「▶ 実行」ボタンは引数なしの実行です)。

ヒント2を見る

sh script.sh 東京 大阪

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。