あらかじめコマンドを書き込んだファイルを作成しておいて,コマンドを書いたファイルを指定してコマンドを実行する. コマンドを書き込んだファイルをスクリプトファイルと呼ぶ.
スクリプトファイルには,コマンドに打ち込むのと同じものを書いたらよい. 複数の行を書くことができる. スクリプトを実行すると,ファイルに書いた一連のコマンドが上から順番に実行される. 反復構造,選択構造,変数,などを使うこともできる.
エディタで以下を書き込んだファイルを作成する(エディタがわからない人はこっちを先に見る). ファイル名は test.sh にしておく.
#!/bin/bash echo Hello World
ファイルの存在を確認し,中身を確認する
$ ls $ cat test.sh
スクリプトファイルは,実行可能になっていなければならない. とりあえず,詳細はわからなくてもよい. test.sh を実行可能にするには,以下のコマンドをうつ
$ chmod a+x test.sh
実行可能になったことを確認する
$ ls -l test.sh -rwxr-xr-x 1 george george 27 Oct 24 12:00 test.sh
左から4文字目が x になっていたらよい.
$ ./test.sh Hello World
#!/bin/bash echo Hello World
1行目は,このスクリプトは /bin/bash で実行してください,ということを言っている. とりあえず詳しいことは知らなくてもよい. シェルスクリプトの1行目はこういうふうに書くのだと思っておいたらよい.
2行目は,シェルのコマンドが書いてある. echo は,それに続けて書いたものを画面に表示しなさい,というコマンド. これを実行したら,Hello World と画面に表示される. たしかにそのように表示されましたよね.
スクリプトは基本的に前から順番に実行される. このスクリプトは2行しかなくて,1行目は作業内容ではないから,実質的には2行目の1行だけしかないスクリプトで,前から順番とかそういう感じになっていないが,複数の行からなるスクリプトは前から順番に実行される.
test.shを次のように書き換える.
#!/bin/bash echo Haru ha akebono echo Yauyau shiroku nariyuku yamagiha
実行してみる
$ ./test.sh Haru ha akebono Yauyau shiroku nariyuku yamagiha
test.shにもっと書いてみる.
#!/bin/bash echo Haru ha akebono echo Yauyau shiroku nariyuku yamagiha echo sukoshi akarite echo murasakidachitaru kumo no hosoku tanabikitaru
実行してみる
$ ./test.sh Haru ha Akebono Yauyau shiroku nariyuku yamagiha sukoshi akarite murasakidachitaru kumo no hosoku tanabikitaru
先に「スクリプトファイルは,実行可能になっていなければならない」と書いたが,厳密には正しくない. 実行可能になっていなくても,実行することはできる.
test.sh を実行不可に変更する
$ chmod a-x test.sh
実行不可になったことを確認する
$ ls -l test.sh -rw-r--r-- 1 george george 143 Oct 24 12:02 test.sh
先頭の10文字の中に x がないことを確認
ここで,test.sh を実行してみる
$ ./test.sh -bash: ./test.sh: Permission denied
実行許可がないので実行できない
次のようにすると,実行許可がなくても実行できる
$ bash test.sh Haru ha Akebono Yauyau shiroku nariyuku yamagiha sukoshi akarite murasakidachitaru kumo no hosoku tanabikitaru
ちなみに,実行許可になっているファイルも同様にして実行することができる
$ chmod a+x test.sh $ ls -l test.sh -rwxr-xr-x 1 george george 143 Oct 24 12:03 test.sh $ bash test.sh Haru ha Akebono Yauyau shiroku nariyuku yamagiha sukoshi akarite murasakidachitaru kumo no hosoku tanabikitaru
ということで,パーミッションを変更するのが面倒という人は「bash ファイル名」でシェルスクリプトを実行すればよい. 実行するたびに bash とか付けるのが面倒という人は,最初に1回だけパーミションを変更したらよい. どっちでもよい.