シェルとシェルスクリプト 2 シェルスクリプト

シェルスクリプト

シェルスクリプトの作成

 シェルスクリプトはテキストで記述する。lsとdateコマンドを実行するシェルスクリプトを記述してみる。

$ vi lsdate.sh
(lsdate というファイルを作成する)

インサートモードで以下のように記述する。その後保存して終了する。( ESC キーの後に :wq )

#!/bin/bash
ls
date

 1行目に利用するシェルの種類とそのコマンド位置を記述する。シェルには数種類あるが、今回は bash を使用する。1行目にシェルを指定、2行目以降に実行するコマンドを1行ず入力していく。

パーミッションの変更

 作成したシェルスクリプトを実行するには、パーミッションを変更してファイルの実行権限をつける必要がある。現在のシェルスクリプトに実行権限があるかどうか確認する。

lsコマンドでファイルのアクセス権限を確認する。

$ ls -l lsdate.sh
-rw-rw-r--  1 hoge  staff  20  2  1 14:17 lsdate.sh

実行権限を付与するために、chmod コマンドを実行する。

$ chmod u+x lsdate.sh
$ ls -l  lsdate.sh 
-rwxrw-r--  1 hoge  staff  20  2  1 14:17 lsdate.sh

これで、所有者に実行権限を与えることができた。早速実行してみる。

$ ./lsdate.sh
0072                HTML & CSS          Pictures            projects            umask0022           umasl0022
Applications            JavaScript          Public              ruby                umask0070           user
Desktop             Library             chownfile           sinatra             umask0072           vireplace.txt
Documents           Movies              idbitfile           test                umask020            名称未設定フォルダ
Downloads           Music               lsdate.sh           umask               umask022
2021年 2月 1日 月曜日 14時18分59秒 JST

./ というのはパス指定である。意味は 「 カレントディレクトリにある ( lsdate.sh を実行せよ ) 」 ということである。ls や cp を実行するときはパスが通っているので、このようなパス指定は必要ない。

 今回はカレントディレクトリにある特定のシェルスクリプトを実行するために、パス指定を行った。lsdate.shの中に記述された、ls コマンドと date コマンドが順に実行されたことがわかる。

コメント

 コメントとは、プログラム上に書く注釈のことである。シェルの場合は # で始まる行がコメントとして認識され、プログラムの実行時はコメントは無視される。コメントは多くの場合、プログラマーが記述したプログラムがどういった処理をするのかを記述したり、一時的に特定の処理を無効化 ( コメントアウト ) する場合に利用する。

先ほどのシェルスクリプトの一部をコメントアウトする。

$ vi lsdate.sh

#!/bin/bash
ls
#date

シェルスクリプトを実行する

$ ./lsdate.sh
0072                HTML & CSS          Pictures            projects            umask0022           umasl0022
Applications            JavaScript          Public              ruby                umask0070           user
Desktop             Library             chownfile           sinatra             umask0072           vireplace.txt
Documents           Movies              idbitfile           test                umask020            名称未設定フォルダ
Downloads           Music               lsdate.sh           umask               umask022
( date コマンドが無視されている。 )

echo コマンド

echo コマンドは引数で与えた文字列を標準出力に出力するコマンドである。

$ echo [ オプション ] 文字列

オプション

-n 
改行を抑制する。通常の出力は改行されるが、このオプションがあると、改行されない。

実行例

$  echo Message test
Message test
( echo コマンドで指定された文字列を表示する )