初心者が押さえておくべきシェルスクリプトの"超基本ポイント"3つ

株式会社テイクーワンのS.Tです。

今回はシェルスクリプト初心者がまず押さえておきたい 「超基本ポイント3つ」 をご紹介します。私がシェルスクリプトを書き始めた頃、構文そのものはシンプルなのに、ほんの少しの記号の違いやスペースの有無で動作が大きく変わることに何度も悩まされました。

この記事では、私が実際にハマったポイントを取り上げています。
同じように戸惑う方が、少しでもスムーズに学習を進められるように役立てば嬉しいです。

*記号を含む説明の際は、見やすさのために記号を括弧 () で囲んで表記しています。

シングルクォートとダブルクォートの違い

シェルスクリプトを書く際にまず押さえておきたいポイントが、シングルクォートとダブルクォートの違いです。

シングルクォート(' ')

  • 中の文字を 「完全にそのままの文字列」 として扱う
  • 変数展開しない (例 : 変数 name に代入しても、そのまま $name が出力される)
  • コマンド置換しない (例 : $(date) なども文字列として扱われる)

ダブルクォート(" ")

  •  変数展開される (例 : 変数nameに代入した値が、$name に置き換わって出力される)
  • コマンド置換される (例 : $(date) が実行結果に置き換わる)
  • スペースを含む文字列もひとまとまりとして扱われる

実例:変数が展開されないケース

name="S.T"
echo '$name'

# 出力結果→ $name

正しい書き方

echo "$name"

# 出力結果→ S.T

if文のスペース

「全部正しく書いたのになぜかエラーになる」
そんな時は、if文のスペース不足が原因かもしれません。

Bashでは([])がコマンドとして扱われるため、前後にスペースが必要です。

× 間違い例 (エラーになる) 

a=1
if[$a -eq 1]; then
     echo "OK"
fi

✓ 正しい書き方

a=1
if [ "$a" -eq 1 ]; then
     echo "OK"
fi

変数代入のスペースはNG

例えば、

x = 5

のような変数代入の書き方をする言語もあるかと思います。
しかし、Bashでスペースを入れると、コマンドとして解釈されてしまい、動きません。

×NG (エラーになる)

count = 5

これは、
「countというコマンドを、= と 5 を引数にして実行する」
という意味になってしまいます。

✓正しい書き方

count=5

おまけ:文字代入はクォート必須

message="hello world"

スペースを含む文字列は、クォートで囲まないと単語ごとに分割されてしまいます。

まとめ

シェルスクリプトは、記号やスペースの扱いが非常に厳密なので、ほんの少しの書き方の違いでエラーになることがあります。

今回ご紹介した内容は、シェルスクリプトを書く上で最初に押さえておきたい基本ポイントです。

★押さえるべき3つのポイント

  1. クォートの違い
  2. if文ではスペースが命
  3. 変数代入にはスペースを入れない


この3つ理解しておけば、
「なんで動かないの?」という悩みをグッと減らすことができます。

前へ

『「技術書」の読書術』を読んでみた - 選び方からアウトプットまで、達人のコツ