[ 岡山大学 | 理学部 | 地球科学科 | 地球および惑星大気科学研究室 ]

大気科学演習1

シェルスクリプト

あらかじめコマンドを書き込んだファイルを作成しておいて,コマンドを書いたファイルを指定してコマンドを実行する. コマンドを書き込んだファイルをスクリプトファイルと呼ぶ.

スクリプトファイルには,コマンドに打ち込むのと同じものを書いたらよい. 複数の行を書くことができる. スクリプトを実行すると,ファイルに書いた一連のコマンドが上から順番に実行される. 反復構造,選択構造,変数,などを使うこともできる.

シェルスクリプトを書いてみる

エディタで以下を書き込んだファイルを作成する(エディタがわからない人はこっちを先に見る). ファイル名は 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行だけしかないスクリプトで,前から順番とかそういう感じになっていないが,複数の行からなるスクリプトは前から順番に実行される.

3行にしてみる

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回だけパーミションを変更したらよい. どっちでもよい.




Last Updated: 2023/09/14, Since: 2019/10/24.
This page is generated by Makefile.rd2html.