変数を使ってみよう
前回、「helloworld.sh」を作成しましたが、ある程度はbashスクリプトの書き方を掴めましたでしょうか?
今回は、「helloworld.sh」をもうちょっと拡張してみましょう。
前回作成したスクリプトはこんな感じでした。
#!/bin/bash echo "Hello World!!"
これだけでは寂しいので、もうちょっと拡張してみます。
viで新たに「helloworld2.sh」を作成して、以下を入力しましょう。
#!/bin/bash V_OPTION=$1 echo "Hello $V_OPTION World!!"
できましたか?
間違いが無い様であれば、前回と同じく、実行権限を付与して実行してみましょう。
# chmod +x helloworld2.sh # ./helloworld2.sh Hello World!! #
余り変化が無いですね。あると言えば「Hello」と「World!!」の間のスペースが1文字増えた感じでしょうか。
では、次はこのスクリプトに「bash」という文字列(オプション)を付けて実行してみましょう。
# ./helloworld2.sh bash Hello bash World!! #
どうですか?
出力された文字が「Hello World!!」から「Hello bash World!!」に変わったのが判ると思います。
このスクリプトは、オプションを取得し、そのオプションを表示する様になっています。
オプションは「$1」というbashの組込変数に格納されます。
このbashの組込変数である「$1」の事を「位置パラメータ」と言います。
位置パラメータはそのスクリプトに渡されたオプションの位置を現しています。
一つ目のオプションとして渡した「bash」という文字列は、この「$1」という1番目の位置パラメータに格納される事になります。
ちなみに、「$0」はスクリプト名を指し、「$2」は2番目のオプションを指します。
今回作成したスクリプトは、2行目で、「$1」という位置パラメータから、
「V_OPTION」という変数に値(bash)を格納しなおし、3行目の出力文字列内で変数を呼び出して表示しています。
変数は、変数名の前に「$」を付与する事によって、呼び出す事ができます。
ただ、今回作成したスクリプトの様に、変数名に「$」を付与しただけだと変数名が判りづらい時があります。
例えば、今回は「Hello World!!」という文字列の間のスペースで区切られた部分に付与されたオプションを表示するので問題は発生しませんでしたが、
スペースの無い「HelloWorld!!」という文字列の間に付与されたオプションを表示したかった場合、どうなるでしょうか?
試しにスクリプトを以下の様に改変して実行してみましょう。
#!/bin/bash V_OPTION=$1 echo "Hello$V_OPTIONWorld!!"
# ./helloworld2.sh bash Hello!! #
先ほどと違い、「V_OPTION」変数に格納されている「bash」という文字列が表示されないどころか、
「World」という文字列まで表示されなくなってしまいました。
これは、「V_OPTIONWorld」という変数に格納された文字列、即ち、何も格納されていない変数の値が、
表示されています。この様な事象が発生すると、スクリプトを書いた本人が想定していない実行結果になる事があります。
この様な事を無くす為、変数を「{」と「}」で括る事によって、どこまでが変数なのかを明確にする事ができます。
以下の様に改変して、実行してみてください。
#!/bin/bash
V_OPTION=$1
echo "Hello${V_OPTION}World!!"
# ./helloworld2.sh bash HellobashWorld!! #
これで想定通りの結果になりましたね。
多少面倒だとは思いますが、変数を呼び出す時は、必ず「{」と「}」で括る様にしましょう。
