f

Mac vi エディタによるシェルスクリプトの編集:
初心者向けの解説

UB3/informatics/mac/shellscript_vi

このページの最終更新日: 2024/09/30


  1. 最初の練習: vi エディタ で Hello World を実行する
    • vi エディタの起動、モード選択
    • Hello world を書いて保存する
    • Hello world を実行する

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

広告

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

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

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

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

このページでは、上のような疑問を抱く素人向けに vi エディタの使い方を中心に解説する。

.sh ファイルは他のテキストエディタでも編集できるので、多くの場合はその方が便利だと思う。私は TextWrangler や Brackets を使っている。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
カーソルがある一文字を削除する。
o
カーソルがある行の次に 1 行挿入する。
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 とターミナル上に表示されるはず。これが シェルスクリプトを実行した ということである。


広告

References

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

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。