スポンサーリンク
概要
最近サボり気味でしたが、久しぶりの技術書感想です。
オライリーの「入門bash 第3版」を読んだので紹介と忘備録的なメモです。
スポンサーリンク
スポンサーリンク
書籍概要
どんな本?
前版の『入門 bash 第2版』発行から7年が経ち、リビジョン/バージョンアップを繰り返してbashの機能も大きく強化されました。
今ではLinux/Unixユーザーだけでなく、Cygwinを利用するWindowsユーザー、Mac OS Xユーザーもbashを使うようになりました。第3版の本書では、多くのLinuxディストリビューションで標準の2.05bに対応したまま、最新バージョンの3.0で利用できる新機能ついても解説します。
bash-2.0以降に追加されたオプションを網羅する待望の改訂版。
- Cameron Newham, Bill Rosenblatt 著、株式会社クイープ 訳
- 2005年10月 発行
- 368ページ
- 定価3,080円(税込)
スポンサーリンク
スポンサーリンク
内容のまとめと感想
LinuxやMacといったOSではよく使われている、シェルスクリプトのbashの入門書です。
bashの基本的な構文や使い方の説明から始まり、実際にシェルスクリプトを使ったプログラミングをコードをベースに説明していく本です。
出版は2005年と古めですが、シェル系の技術は基本的に完成されていて、大きく変化しないので、今読んでも問題ないと思います。
(実際に中古の値段も比較的安定して高めの値段がついています。)
練習問題などもあり、ハンズオン的に学ぶには良いです。
後半は結構専門的な話題も含まれているので、初心者やちょっとシェルを触って何かやりたいというには敷居が高く感じました。
(Amazonのレビューを見ると逆にバリバリシェルプログラミングしたいという人向けには物足りないといった評価もありました。)
最近はWindowsでもCygwinを使わなくても、GitBashやWSL(Windows Subsystem for Linux)といったLinuxのシェル環境が簡単に使える環境が揃ってきたので、ちょっと入門したみたいという人も読んでみると勉強にはなるかと思います。
私自身が普段仕事ではWindowsを使う事が多いので、bash自体を使うのはAWSなどのクラウド上に作成したCentOSやAmazon Linuxの仮想環境を操作する時くらいなので、環境構築時に我流でググりながらシェルファイルを作成する事が多く、一から学ぶにはちょうど良かったです。
前述の通り、後半はレベルが高いというか用途としては個人的には使わないというものが多くて、簡単に流し読み程度で済ませてしましました。
また、各種シェル内で使用するコマンドなどLinux全般に関する知識は必要最低限なので別途Linuxをしっかりと学ぶ本を読みたくなりました。
スポンサーリンク
章のまとめと感想
第1章 bashの基礎
タイトルの通り、bashの基礎を説明している章です。
UNIXのシェルとは?といったやbashの歴史といった話から始まり、Linuxにおけるディレクトリの構成やワイルドカード、標準入出力などの基本的なシェルの使い方が説明されています。
第2章 コマンドライン編集
emacsやviといったCUIベースのテキストエディタの使用方法などを中心に説明されています。
初めてLinuxを触るとこのあたりのCUIを使ったエディタに慣れずに、困惑するので説明があるのは良いと思いますが、ある程度使った事があれば読み飛ばしても良いかも。
(viとemacsのどちらも載っていますが、お好みでどちらか見れば良いと思います。私はvi派。)
第3章 環境のカスタマイズ
シェル実行環境のカスタマイズ方法に関して説明した章です。
シェル環境実行時のプロファイルや、任意のコマンド名を付与できるエイリアス、環境変数などの説明が描かれいます。
プロファイルに環境変数を定義する事で、どのシェルからも参照可能になるのはなるほどと思いました。
(Linuxずっと触っていると知っていて当たり前かもしれませんが・・・。)
第4章 基本的なシェルプログラミング
これまでは対話的なシェル実行が中心でしたが、シェルファイル(sh)を使ったプログラミングに関して説明されている章です。
シェルの実行方法による仕組みの違いや、関数や変数、スコープなど基本的に文法の説明があります。
個人的なメモ
シェルの実行方法による違い
sourceコマンドによる指定→ 対話的による実行と同じ。
シェルを指定した実行→ 実行権限が必要。またサブシェル実行となり、実行元のシェル側の変数はスコープ外となる。エクスポートされた環境変数などは参照可能。
位置パラメータ
シェルが受け取った引数は位置パラメータといった形で変数に格納される。
(例:xxxx.sh aaa bbb cccといった形で実行されれば、$1がaaa,$2がbbb、$3がccc)
この際に$@もしくは$*を使用するとこれらを全て保持した変数として利用できる。
"$@"は"aaa" "bbb" "ccc"といったようなそれぞれの変数が区別されて"$*"は"aaa bbb ccc"といったまとまった文字列で処理される。後者はログに出力したい場合などの用途として使用できる。
詳細は下記が詳しいです。
https://fumiyas.github.io/2016/12/15/positional-parameters.sh-advent-calendar.html
関数における変数と位置パラメータ
変数のスコープ → 関数内外でも同じ変数名は参照が同じ。関数内のスコープにしたい場合は"local"を付与する。
位置パラメータのスコープ → 関数内外で異なる。関数の位置パラメータは関数の引数。
例:
1 2 3 4 5 6 7 |
function hoge { echo $1 # 関数に渡された引数 } echo $1 # シェルに渡された引数 hoge aaa |
文字列演算子
変数を{}で囲んで文字列演算子を使用する事で、変数のチェックやデフォルト値の設定などが処理できる。
例:
${hoge:-0} → 変数hogeが定義されていなければ0を返す
${hoge:?"error message"} → 変数hogeが定義されていない場合には"error message"を出力した上で後続の処理を停止する
${hoge:4:2} → 変数hogeの5文字目から2文字を返す
第5章 フロー制御
4章から引き続き、プログラミング構文的なシェルの説明になります。
if/elseなどの条件分岐やforループ、変数の比較方法などの説明が描かれています。
第6章 コマンドラインオプションと型を持つ変数
前半はシェルのコマンド引数を受け取る際の様々なテクニックが説明されています。
よくあるハイフン付きのパラメータの定義方法(xxxx.sh -o aaaなど)などが例として説明されています。
後半は、配列や数値など変数を明示的に形定義する方法に関して説明されています。
第7章 入出力とコマンドラインの処理
パイプや標準入出力やecho、printfなどの出力に関する説明が記載されています。
後半はコマンドラインにおける入力の受け取り方の詳細な流れやevalによる文字列による動的なシェル実行などが説明されています。
第8~9章
8章はプロセスの操作、9章はシェルプログラミングのデバッグに関して説明されています。
この辺りはかるく読み飛ばす形で進めてしまいました。
シェルでシェルのデバッガを作ったりするなど結構高度なこともやっています。
デバッグのオプションに関しては参考になりました。
個人的なメモ
デバッグオプション
hoge.sh -v でコマンド実行前にエコーが表示される。
複数業のシェルがある場合にどこでエラーとなったか発見するのに便利。
hoge.sh -xでシェル実行前のコマンドライン処理のエコーも表示されてより詳細なデバッグが可能。
hoge.sh -n で実際に実行せずに構文エラーのチェックのみできる。
第10~12章
この辺りはかなりざっとだけ読み進めました。
10章はbashの管理といった管理者的な観点でのシェルの実行や権限による話。
11章はシェルスクリプティングといったタイトルで、シェルを記載するの簡単なベストプラクティスが記載されています。
この辺は一般的なプログラムのプラクティスでも見るような話で、コメントや変数などの定義に関するお話ですね。
12章はbashの導入といった、bashが未導入であったり古いバージョン環境へのインストール方法が記載れていました。
スポンサーリンク
まとめ
bashに関して基本的な使用方法や文法に関して学ぶ事ができる本です。
後半は結構マニアックな説明やコードが多く、理解するにはちょっと骨が折れそうでした。
前半を中心にサクッと読むだけでもある程度bashの基本を学べそうです。
ただ、もう少ししっかりと学ぶならば、新しめで翻訳本でない下記を読んでみるのが良さげな感じがしていて、購入しようか迷っています。
下記も積読してしまっているので、読んでみたいのですが、まだそのレベルではない気もしていてい難しい所です。
大量の技術書が積読になっており、時間もモチベーションが足りていなくてどうしたものか・・・。
仕事でlinux使う機会があると早いんですけどね・・・。