このページではシェルスクリプトの書き方と実行方法について簡単にご紹介している。
はじめの1行目の意味や、実行権限などについても一通りお伝えしよう。
先にシェルスクリプトとは?について先に知りたいという方は下記に詳しい。
シェルスクリプトの作り方
1行目でシェルを選択する
シェルスクリプトを記述するときに、まず初めに覚えなければならないのは次の一行だ。
#!/usr/bin/bash
これはスクリプトの一行目に記述する。この一行目で、実行時どのシェルでスクリプトを実行するかが決まる。
シェルについては下記でご説明している。
シェルにはいくつも種類がある。
BourneシェルはUNIXの標準的なシェルでこれを改良したのがbashだ。bashが多くのディストリビューションにおいて標準シェルになっている。
他にもCシェルやKornシェルなどがあるが、上記の「#!/usr/bin/bash」ではbashを選んでいることになる。
2行目からコマンドの羅列
2行目以降はつらつらとコマンドの羅列、つまりスクリプトを記述していくことになる。試しに「hello-world」を表示させてみよう。
vi testscript.sh
1 2 3 |
#!/usr/bin/bash echo hello-world |
「echo」は渡された文字を、そのまま標準出力へ出力するコマンドだ。
シェルスクリプトを実行してみる
さて書きおわったら次に実際に実行してみよう。その前に権限の設定が必要なのを覚えておく必要がある。
$ chmod 755 testscript.sh
として実行権限をあたえる。
「なぜテキストファイルに実行権限をもたせるのか?」と疑問に思うかもしれない。
「シェルはインタプリタである」ということを思い出してほしい。実行権限を付与しシェルに伝えれば、スクリプトとして実行される。
さて実際に実行してみよう。スクリプトのあるディレクトリに移動して
$ ./testscript.sh
としてみると、実際に実行され、処理されるはずだ。
シェルスクリプトのパス
最初の「./」の部分に注意していただきたい。
Linuxではパスの通っていないところでのファイル、コマンドの実行はきっちりとフルパスで指定しなければならない。
カレントディレクトリも例外ではないので、注意しよう。
またあまり遭遇しないが「bash ./testscript.sh」とすると一行目の「#!/usr/bin/bash」を省くことができるが、tipsだ。覚えなくてもいい。
拡張子について
最後にもう一つ。
拡張子「.sh」とあるが、厳密にはLinuxは拡張子を必要としないので「.sh」は必ず書かなくてはならないというわけではない。
しかしエディタなどは「.sh」でそれがsh系のスクリプトであると判断するのでとりあえず、最後には「.sh」をつけておこう。
まとめ
このページではシェルスクリプトの作り方と実行方法についてお伝えした。
ここまでが前提知識だ。ここからが少しプログラミングが入り、シェルスクリプトらしいシェルスクリプトになってくる。
いつも分かりやすく助かっています。
質問がありまして、
centos6を使っているのですが、シェルスクリプト の一行目を#!/usr/bin/bashとしたところ、ファイルとディレクトリがありませんと出ました。
そこで/bin/bashとしたところ上手く行きました。
これは何故なのでしょうか?
ご愛読いただきありがとうございます。
インストールするディストリビューションによって、bashがどのフォルダに入るか異なっており、
最初の一行目で#!/usr/bin/bashを打つと、/usr/bin/bashを探しに行ったが、ファイルとディレクトリが見当たらなかったので、
「ファイルとディレクトリがありません」と表示されたものかと思われます。
/bin/bashで成功したということは、今回インストールしたディストリビューションでは、
/usr/bin/bashではなく、/bin/bashに保存されていたということですね。
いつか統一してほしいと願うばかりです。
宜しくお願い致します。