「新しいシェルプログラミングの教科書」がめちゃめちゃ良かった

f:id:suganoo:20200203200932j:plain

新しいシェルプログラミングの教科書

新しいシェルプログラミングの教科書

  • 作者:三宅 英明
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2017/11/21
  • メディア: 単行本
シェルプログラミングは得意ですか?

シェルプログラミングって苦手だったんですよね。っというか嫌い....。

なぜかというと、何となくなんですが、、、

  • イケてない
  • ダサい
  • 変数大文字?変数入力するときイコールにスペース入れちゃダメ、は?何それ?

.....などなど

ほんとそんな独断と偏見で嫌ってました。

ですがインフラの仕事をしているとシェルスクリプトから逃れることはできません。

様々なツールはシェルプログラミングでできてることが多いので読まずに仕事はできないんです。

そもそもシェルプログラミングってかなりお手軽なんですよね。

Linuxのディストリビューションには必ず入ってるので、インストールが不要というのはとてもありがたいのです。

RubyやGoなど後からインストールしなきゃならないので、じゃそのバージョンどうするか?とかデプロイ方法書き直す必要あるとか、後からインストールするのはなかなか注意が必要なのです。

でもシェルはもともと入ってるのですぐ使えます。

便利ですよー!!


そんなお手軽さがあるのにただ何となく嫌ってたシェルプログラミング。

てきとーにスクリプト書いてましたが、だんだんとなんだこれ?と思うところが増えて来て、ツケが回ってくることが多くなりいっちょ本でも読むかと思いました。

そんな時にたまたま「新しいシェルプログラミングの教科書」を読んだんですが、めっちゃいい本!!!
あーこれ気になってたところだ!っというのがいくつも出てきました。

  1. { } と ( ) でコマンド実行する違いわかります?
  2. grep -q ってどんな時に使うか知ってます?
  3. source ってどんな効果あるか知ってます?
  4. コマンドにつける --、 例えば find -- dir/ などの「--」の意味知ってます?
  5. set -o noexec ってどんな効果あるか知ってます?
  6. ${0##*/} の意味わかります?

などなど

あーそうそうこれわからなかったけど飛ばしてたーーー!!!というところがたくさん出てきました。

何枚も目からうろこが落ちます。
※↑の答えは最後に記載してます。

までも、いきなりプログラミングやったこと無い人がシェルプログラミングのコードを読んでも退屈すると思うんで、ある程度シェルプログラミング書いたことある人の方がオススメです。

エンジニアとして仕事をしているのであればなおさらオススメですよ。




(答え)

  1. {}はグループコマンドで{}でかこったコマンドをまとめて1つのコマンドとして実行します、また()はサブシェルといって子プロセスとして()でかこったコマンドを実行します。
  2. grep -q はgrepの結果を出力しないようにします。if の判定のところにある文字があればtrueにする場合など出力結果が要らないので-qをつけることができます。
  3. source は現在の実行プロセスのなかで変数を定義したりします。通常シェルプログラミングの中の定義した変数は子プロセスを立ち上げて変数が定義されるので、実行が終了すれば変数は無くなりますがsourceは定義されたままになります。
  4. --のあとの引数はコマンドに対する引数であることを表します。-xxxなどパラメータと分けて読み込ませるためです。
  5. set -o noexecを実行すると、中身を実行せず構文解析のみをしてくれます。
  6. パス形式でシェルスクリプトを実行した場合でもファイル名のみが取得されます。説明は複雑になるのでP215読んでみてください。

新しいシェルプログラミングの教科書

新しいシェルプログラミングの教科書

  • 作者:三宅 英明
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2017/11/21
  • メディア: 単行本