【Mac】シェルスクリプトの使い方

シェルスクリプトは、コマンドを書きこんでおくと、一行ごとに、上から順番に実行してくれる、コマンドの台本みたいなものだ。コンピュータでおこなわれる作業の自動化によく使われる。

日報のスクリプト

デスクトップへいって新規フォルダを作り、なかに日付を書いたテキストファイルを作成する、という作業を毎朝、繰り返さなくてはならない。
 そんな状況があったとする。
 同じことの繰り返しは、自動化できる可能性が高い。
 マウスやキーボードを操って新規フォルダを作ったり、テキストエディタを立ち上げてファイルを保存するより、シェルスクリプトを書いたほうが、おそらく楽だ。

cd ~/Desktop #デスクトップへ行き
mkdir '日報' #日報という名前のフォルダを作り
cd '日報' #日報フォルダの中に入って
touch `date "+%y%m%d"`'日報.txt' #きょうの日付けのテキストを作成

「 # 」はコメント記号なので、# から右は読みこまれない。

シェルスクリプトは、 ふつうのプレーンテキストに書きこみ、拡張子に「.sh」をつけて保存する(つけなくてもいい)。文字コードは Mac の場合 UTF-8 にしておけば間違いない。改行コードは「LF」にする。

CotEditor だとツールバーで文字コード、改行コードを変更できる

ここでは「nippo.sh」と名付けた。

シェルスクリプトの実行

実行はターミナルでおこなう。

sh nippo.sh

という具合に、sh にスクリプトのファイル名をくっつけて、リターンキーを押す。
 sh の後には必ず半角スペースが入っていなければならない。

ユーザがいるディレクトリと、同じディレクトリにスクリプトがある場合は、上記のようにファイル名をくっつけるだけで実行できる。どういうことか。

ディレクトリとは階層のことで、ターミナルを起動すると、ユーザはふつうホームディレクトリにログインする。「書類」やら「ピクチャ」やら「デスクトップ」が入っている、ホームフォルダのことだ。

ターミナルを起動すると現われる「MacBook:~ ユーザ名$」のような表示は、ユーザがホームディレクトリにいることを示している(~ が、ホームをあらわす記号なのだ)。
 自分がいるディレクトリを、カレントディレクトリという。
 スクリプトファイルが、カレントディレクトリにある時は、sh nippo.sh だけでスクリプトを実行できる。同じ階層にあるからだ。

しかし例えば、スクリプトファイルが、デスクトップや書類のような別の階層にある場合は、以下のように場所を指定して書かなくてはならない。

sh ~/Desktop/nippo.sh

sh まで書いたら、スクリプトをターミナルのウィンドウ内にドラッグ&ドロップすれば、ターミナルが自動で場所とファイル名を入力してくれる。

実行権の付与

初回はほとんどの場合、以下のような警告が出て、実行できない。

-bash: /Users/user/Desktop/nippo.sh: Permission denied

シェルスクリプトの実行には、実行権が必要なのだ。
 権限に関するコマンドは chmod である。
 権限には三つあり、読み取り[ r ]、書き込み[ w ]、実行[ x ]などとあらわされる。このなかの x をシェルスクリプトに与える。

chmod u+x ~/Desktop/nippo.sh

[ u ]というのは所有者のことだ。これに[ x ]をプラスするイメージだろうか。ユーザの種類には、[ u ]の所有者のほか、[ g ]のグループ、[ o ]のその他がある。

ふたたび実行する。

今度はうまくいった。

ちなみに CotEditor は、ファイルを保存するタイミングで実行権を付与できて便利だ。

チェックを入れると実行権が付与される

その他の実行方法

実行のたびに冒頭に「sh」をつけるのが面倒な場合は、はぶく方法がある。
 シェルスクリプトの一行目に、以下の文字列を加えるのだ。

#!/bin/sh

これを追加して保存すれば、次回からは、

~/Desktop/nippo.sh

だけで実行できる。
 カレントディレクトリにあるファイルを実行する場合は、

./nippo.sh

と「./」が必要だ。

パスの通ったディレクトリにシェルスクリプトを置くと、script.sh だけで実行できて、さらに便利になる。

🔗 【Mac】 パスを通す | 林檎コンピュータ