Mac vi エディタとシェルスクリプト: 初心者向けの解説

informatics/mac/shellscript_vi
2018/02/22 更新


  1. 概要: シェルスクリプトとは
  2. 最初の練習: vi エディタ で Hello World を実行する
    • vi エディタの起動、モード選択
    • Hello world を書いて保存する
    • Hello world を実行する
    • 他のテキストエディタでも良さそう

  3. シェルスクリプトについてのメモ

広告

概要: シェルスクリプトとは

Mac では、ターミナルというプログラムにコマンドを入力することで、さまざまな操作を行うことができる。このコマンド操作を連続して行いたい場合、

  1. あるファイルに複数のコマンドを書き込み、
  2. そのファイルを実行する

という手順を踏むことになる。この一連のコマンドをシェルスクリプトといい、vi エディタはシェルスクリプトを編集するためのエディタの一つである。

ターミナルの使い方に自信がない人は、ターミナルのページ を先に読むことをお勧めする。


広告

最初の練習: vi エディタで Hello World を実行する

vi エディタは、(慣れれば違うのかもしれないが) 非常に使いにくいエディタである。

シェルスクリプトの初心者向けのページでも、.sh ファイルに書き込む内容から始まっていたりする (1,2)。しかし、私のようなど素人は、そもそも以下のようなことがわからない。

  • .sh ファイルはどこに保存すればいいのか?
  • どうやって .sh ファイルを編集するのか?
  • vi コマンドを使ったら、画面が変になって抜けられない。

ターミナル上で動く、つまり他のエディタをインストールしなくても使えるのが大きなメリットである。


vi エディタの起動・モード選択

vi エディタは、vi + ファイル名で起動する。存在しないファイル名を指定した場合、ファイルを新規に作ることになる。


iMac:~ Hiro$ vi test.sh


この vi エディタには 編集モードとコマンドモードがある。起動直後はコマンドモードになっている。

  • コマンドモードから編集モード → i をタイプするのが基本。下の表参照。
  • 編集モードからコマンドモード → Esc キー

画面の一番下に情報が出る。たとえば、起動して i をタイプすると --Insert-- と表示されるはずである。重要なコマンドを表にしておく (3)。Ref 3 には、もっとたくさんのコマンドが載っている。

i
現在のカーソル位置から編集する。挿入モード。
R
現在のカーソル位置から編集する。上書きモード。
:wq
保存して終了する。
:w
保存する。終了はしない。

Hello world を書いて保存する

新しいプログラミング言語を勉強するときは、なぜか "Hello world" というフレーズを使うのが伝統。このことから、一生世界に挨拶してろ というのが、たくさんの言語を知ってるだけのダメプログラマーに対する破壊力のある煽りになる (一時期評判になったツイート)。

伝統にのっとり、世界に挨拶するシェルスクリプトを書いてみる。まずは、上で既に実行していると思うが、ターミナルで以下のようにタイプ。ターミナルの一番下に test.sh [New File] と表示されているはず。


iMac:~ Hiro$ vi test.sh


続いて

  1. i をタイプすると test.sh [New File] が --Insert-- に変わり、編集可能に。
  2. #!/bin/sh とタイプ。「シェルスクリプトを書きます」という記号みたいなもの。
  3. 改行して echo "Hello world" とタイプ。
  4. Esc でコマンドモードへ戻り、:wq で保存して終了。通常のターミナル画面に戻るはず。

.sh ファイルは Finder 上でも見えるし、ターミナルの ls や cat というコマンドも普通に使える。単なる テキストファイル と考えて良さそうだ。基本的に、どの場所に置いておいても問題ない。


Hello world を実行する

次に、test.sh の内容を読み込んで実行する。原則として ファイル名がそのままコマンドになる ので、ターミナルで test.sh とすれば実行される。

実際には、2 つの問題点がある。


コマンド検索パスの問題

単に test.sh とすると、デフォルトのコマンド格納フォルダ /bin などで test.sh を探すため、-bash: test.sh: command not found というエラーになる。パスを通す か、カレントフォルダという指定をつけて ./test.sh と実行する。


パーミッションの問題

普通に .sh ファイルを作成すると、おそらく「読み込み・書き込みは可能だが、実行する権限がない」という状態になっているはず。ls -l コマンドでチェックできる。

-rw-r--r-- 中略 test.sh

のように表示されていたら、その状態。実行権 x を付与するために、chmod というコマンドを使う。

chmod +x test.sh

もう一度 ls -l を実行してみると、上記の部分が -rwxr-xr-x に変わっているはず。


パーミッションを変更してから ./test.sh とすると、Hello world とターミナル上に表示されるはず。これが シェルスクリプトを実行した ということである。


他のテキストエディタでも良さそう

この .sh ファイルは、Mac デフォルトの TextEdit や、私が愛用している TextWrangler でも編集することができる。編集後も普通にターミナルから実行できるので、実は面倒な vi エディタを使う必要はない。

TextWrangler だと、echo や #!/bin/bash などが自動的に違う色で表示され、非常に見やすいコードが書ける。


シェルスクリプトについてのメモ

とりあえずのメモ欄。内容がまとまってきたら、新しいページを作成予定。

  • for とかで変数を記述するとき、変数名は常に中括弧 { } でくくっておくようにしたい。中括弧がなくても動く場合が多いが、変数周辺の記述によってはおかしなことになる。中括弧をつけておいて損はない、という感じ。

広告

コメント欄

一言コメントをどうぞ! (基本500字まで - 100字のページもあるかも)


このコメント欄は各ページにあるので、いつ管理人がコメントを見ることになるのか分かりません。内容について質問がある場合は、下のリンク先のフォームから質問頂ければ、早めに返信するようにします。


References

  1. 初心者向けシェルスクリプトの基本コマンドの紹介. Link: Last access 2018/02/22.
  2. シェルスクリプト入門 書き方のまとめ. Link: Last access 2018/02/22.
  3. vi エディタの使い方. Link: Last access 2018/02/22.