Shell Script入門 ~bash~

シェルスクリプトとは?

コマンドを書き並べたテキストファイルです.

簡単な例から紹介します.

まず,emacs等のエディターで下の一行だけを書いたテキストファイルを作ります.
このファイルにsc.sh(scはshellscriptの意味)と名前をつけて,保存して,Terminalでbash sc.shとコマンドを打てば無事にlsコマンドが実行されるはずです.

ls

これだけでも立派なシェルスクリプトです.

また,sc.shファイルを下のように編集してもう一回実行すると,今度は現在時刻とカレンダーが表示されるはずです.

date
echo
cal

ここでdateは日付の表示,echoはC言語のputs("");と同じでただ改行をしていて,calでカレンダーを表示しています.

ただ上から書いてあるコマンドが実行されているだけです.


シェルスクリプトのお約束

シェルスクリプトの一行目は大抵,以下のような文字列から始まります.

#!/bin/bash

この意味は一言でいうとこのファイルをbashで実行してねという意味です.

また,普段,コマンドはcpmvなどのように書きますが実は/bin/cp/bin/mvと書いても動きます. これは,/binというディレクトリの下にあるプログラムをいちいち絶対パス指定して実行するのが面倒なので/bin/の部分なしでも動くように設定してあるからです.つまり/bin/bashというのはのbashの正式名称のようなものです.


シェルスクリプトの実行権限

実行したいシェルスクリプトをsc.shという名前だとします. そのとき,bash sc.shとすれば実行できますが,上のお約束を書いてあげればC言語のプログラムのように./sc.shとしても実行することができます.しかし,デフォルトでは実行権限がないので弾かれてしまいます.セキュリティに関する問題からすぐに実行できないように設定されています.

ただ,今回はスクリプトとして実行したいので実行権限をつけます.以下のように打つと実行権限をつけることができます.

chmod u+x sc.sh

chmod(change mode)コマンドは,ファイルのアクセス権限を変更するコマンドです.
現在のアクセス権限はls -lをすると見ることができます.-rw-r--r--というものです.(この設定は環境によって変わります.)
r:read w:write x:executeの意味です.
先頭のd-はファイルかディレクトリかを示しています.
次のrw-はファイル所有者の権限(User)
次のr--は同じグループに所属する人の権限(Group)(デフォルトは自分だけ)
次のr--はそれ以外の人たちの権限(Others)です.
chmod u+xはUser(ファイル所有者)に実行権限を付加するという意味で,このコマンドを実行した後にls -lをしてみると-rwxr--r--のようにxが増えていると思います.


シェルでのクォーテーションの扱い

クォーテーションには,シングルクォーテーション'とダブルクオーテーション"とバッククォート`があります.

この違いは,echoで遊ぶと分かります.

echo "ls"
echo 'ls'
echo `ls`

この例では,上二行は同じ出力lsが得られて,一番下のものはlsをした結果が出力されると思います.(ただし,改行などは崩れていると思います.)バッククォートは中に書いてあるコマンドを先に実行して`ls`の部分をその出力と置き換えてechoを実行します.

次に,これを実行してみてください.

echo '$PATH'
echo "$PATH"

シングルクォーテーションは,文字列をそのまま保持してechoコマンドを実行します.
ダブルクオーテーションは,文字列中の変数等を展開してからechoコマンドを実行しています.($マークから始まる文字列は変数を表しています.)


Shell Script入門2はこちら

Tweet