PNtech

サーバを守る猫が、物忘れしてもいいようにメモをとるところ。UbuntuとかEclipseとかPythonとかJavaとか、つまみぐい。

(ほぼ)はじめてのシェルスクリプト

シェルスクリプトとは

まずは言葉の意味から。

シェルとは

与えられた指示をOSの中核部分に伝えるソフトウェア

スクリプトとは

機械語への変換作業を省略した簡易プログラム

まとめると

複数の処理(コマンドなど)をまとめて行うときに使うものです。

文法

決まりごと

1行目に

#!/bin/sh

と書く。

変数の代入
apple=200  //(1)
fluit=apple  //(2)
bread="toast"  //(3)
today=`date +%Y/%m/%d`  //(4)

(1)のように、数字はそのまま代入できます。
(2)と(3)は文字列を代入しています。""はあってもなくてもいいです。
(4)はコマンドの結果を代入しています。`はshift+@です。

変数の参照

変数の参照には$をつけます。

echo $apple
echo $fluit
echo $bread
echo $today

しかし、文字列に変数をくっつける場合、変数と文字列の境目がわかりにくくなるため、
変数は以下のように ${変数名} とするのが良いようです。普段からこれで書こう。

echo "apple is ${apple} yen."
echo "${fluit} is one of fluit."
echo "I like ${bread}."
echo "It is ${today}."

結果はこのようになります。

apple is 200 yen.
orange is one of fluit.
I like toast.
It is 2013/07/15.
計算

他の言語でよくあるのは

//りんごの価格
apple=200
orange=300
//りんごとみかんを買った場合の合計金額
sum=apple+orange

だと思いますが、シェルスクリプトでは変数に計算結果を代入する場合、これでは使えません。
なぜなら、sumへ"apple+orange"という文字列を代入してしまうから。
よって、りんごとみかんの合計金額を出したい場合は、

apple=200
orange=300
sum=`expr ${apple} + ${orange}`

と書きます。
ここで注意しなければならないのは、

  1. 計算式(右辺)は``(shift+@)で囲む
  2. 演算子の前後はスペース必須
  3. 変数の前の$マークを忘れないように(そして{}で囲むのがのぞましい)

の3点。

出力する文を書いたら、結果は以下のようになります。

I bought an apple and an orange for 500 yen.

まとめ(サンプルプログラム)

変数への代入と参照、コマンドの結果の出力(echo_variable_and_command.sh)
#!/bin/sh

apple=200
fluit=orange
bread="toast"
today=`date +%Y/%m/%d`

echo "apple is ${apple} yen."
echo "${fluit} is one of fluit."
echo "I like ${bread}."
echo "It is ${today}."
計算と出力(echo_sum.sh)
#!/bin/sh

apple=200
orange=300
sum=`expr ${apple} + ${orange}`

echo "I bought an apple and an orange for ${sum} yen."

おまけ

vimを使い始めて間もない方へ、豆知識。
クリップボードからvimへの貼り付けは、

  1. クリップボードへコピー(普通にコピーするあれです)
  2. vimで編集モードにしてから、Shift+Insert

以上です。