第1章:書き方にかかわる基本的な説明

勉強のために買った「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」を読みながら、まとめた個人的なメモです。間違ってるところや怪しいところがありましたらぜひとも突っ込んでくださいませ。まずは第1章で基本的なことから学びまする。

シェルスクリプトの宣言

シェルスクリプトのファイルでは、1行目にこれから書くクリプトはBシェルで動くんだと指定する。それが下の行。当然ながら違うシェル用のスクリプトであれば、違うシェルを指定する。

# !/bin/sh

シェルスクリプトのファイルには実行権限を与える

シェルスクリプトのファイルには実行権限がないと実行できないので、chmodコマンドなどを使ってファイルに実行権限を与える。

$ chmod +x ファイル名

コメント

コメントは#

1行の取り扱い

改行コードを入れると改行される。もし、2行を1行にしたい場合は1行目の最後に\(バックスラッシュ)を入力すると、2行も1行目の続きと認識される。

$ echo hoge \
> HOGE.
$ hoge HOGE.

ただし、\(バックスラッシュ)の前にスペースをたくさん入力しても、\(バックスラッシュ)の前のスペースは、1つのスペースとして認識される。それが嫌な場合は、”などを使って指定する。

$ echo "Hello         \
> World."
$ Hello         World.

クォーテーション

スペースとかを、そのままスペースとして解釈してほしいときなどに使用するのがクォーテーション。クォーテーションを使いたい場合は、以下の3つの方法がある。

  • バックスラッシュ(\)を使用する
    • 一番便利らしい。
    • エスケープキャラクタとも呼ばれる。
    • 対象が1文字だけをクォートする。それ以はシングルクォートとほぼ同じ。
    • 自分自身(\)をクォートするときにも使用。
  • シングルクォート(')を使用する
    • クォーテーションの中で一番強力。
    • シングルクォートでエスケープできないのは、シングルクォートだけ。
  • ダブルクォート(")を使用する
    • コマンドの結果や変数を使用したいときは、シングルクォートだとクォートされてりまうので、ダブルクォートを使う。
    • ほとんどの特殊文字エスケープできるが以下の3つの特殊文字は不可能なので、シングルクォートを使う。
      • $(ドルマーク)
      • `(バッククォート)
      • \(バックスラッシュ)

コマンドの終了ステータス

コマンドなどの終了時のステータスは下記の通り。ステータスは$?と言う変数に代入されるので、見たい場合はecho $?とタイプすればいい。

  • 0 成功 true
  • 0以外 失敗 false

コマンドセパレータ

コマンドの区切りとすることができるものをコマンドセパレータと言う。改行コードもコマンドセパレータの1つになる。以下にコマンドセパレータの解説を掲載。

セミコロン(;)

複数のコマンドを1行にまとめたいときに使用。改行コードと同じ。一番右のコマンドが終了したら、次の左のコマンドが実行される。例:下記の例だと、cat fileのコマンドの実行が終了したら、cat file2のコマンドが実行される。

$ cat file1; cat file2; cat file3
パイプ(|)

vertical lineが本来の言葉。右の実行結果を左に渡す。パイプライン上にあるコマンドは、それぞれが別プロセスとして動作する。終了コードは一番右のコマンドの終了コードが渡される。

アンパサンド(&)

コマンドをバックグランドで実行するときに使用する。&を使用しバックグラウンドで実行されたコマンドは、入力を/dev/nullからもらうようになる。

OR演算子(||)

左のコマンドの実行が失敗したときに、右のコマンドが実行される。ORだからと言って「または」なんて考えると混乱するので注意。
下記のコマンドは、cat file1コマンドの実行が失敗したら(要するに0でないとき)、cat file2のコマンドが実行される。

$ cat file1 || cat file2

下記のような書き方をすると、何らかの事情でhogeってファイルを消せない場合に「ERROR -Cannot remove hoge」ってメッセージが出力される。

$ rm hoge || echo "ERROR -Cannot remove hoge"
rm: hoge: No such file or directory
ERROR -Cannot remove hoge
AND演算子(&&)

左のコマンドが成功したときだけ(要するに0を返したとき)、右のコマンドが実行される。

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界