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

informatics/mac/shellscript_vi
2018/05/25 更新


  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 エディタの使い方を中心に解説する。

.sh ファイルは他のテキストエディタでも編集できるので、多くの場合はその方が便利だと思う。私は TextWrangler を使っている。vi エディタのメリットは ターミナル上で動く こと、つまり他のエディタをインストールしなくても使えることである。

また、普段は触れないような場所にある設定ファイルを編集するときには、なんとなく一般的なテキストエディタよりも vi エディタを使う方が安心感がある。私はそうやって使い分けをしている。


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

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


iMac:~ Hiro$ vi test.sh


別の言い方をすれば、vi というコマンドを実行することで、ターミナル上でファイルの内容を編集できるようになる (= ターミナルがテキストエディタのようになる)。

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

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

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

私の場合は、まず Esc を連打して確実にコマンドモードにし、編集したい位置にカーソルを移動させてから、i または R をタイプして編集モードへ移行する。編集が終わったら、また Esc を連打。最終的に :wq で終了という手順を踏んでいる。つまり、以下の表のコマンドは、基本的にコマンドモードで使用する

i
現在のカーソル位置から編集する。挿入モード。
R
現在のカーソル位置から編集する。上書きモード。
X
カーソルがある一文字を削除する。
dd
カーソルがある行を削除する。
:wq
保存して終了する。
:w
保存する。終了はしない。
:w
保存せずに終了する。
その他
Ref 3, Ref 4 などを参照のこと。

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 とターミナル上に表示されるはず。これが シェルスクリプトを実行した ということである。


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

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

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

広告

コメント欄

フォーラムを作ったので、各ページにあるコメント欄のうち、コメントがついていないものは順次消していきます。今後はフォーラムをご利用下さい。管理人に直接質問したい場合は、下のバナーからブログへ移動してコメントをお願いします。


References

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