シェルスクリプトを復習した&素晴らしい書籍に出会った
IBM AIX 上で動かすksh用シェルスクリプトを書く必要があったので、本を1冊買って復習した。
ここに復習メモを残そうと思っていたが・・・書くことは何もない!
あるとすれば、「この本を見ればわかる!これを読めば大抵の処理は書ける気がする!!」という事実のメモだけだ。
その本がこちら。
[改訂新版] シェルスクリプト基本リファレンス ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)
- 作者: 山森丈範
- 出版社/メーカー: 技術評論社
- 発売日: 2011/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 9人 クリック: 119回
- この商品を含むブログ (11件) を見る
- 基本的な考え方を各大項目の概要の項で理解し易く解説
- 各項の解説が丁寧:疑問に思ったことの大半をカバーしていると感じた
- 移植性への考慮:Linux, FreeBSD, Solaris のそれぞれでの使用可否、および代替手段へのリンク。移植性の高いコマンドで開発できるように導いてくれる
- 目次が良い:各項の概要が1行で記載されているのでリファレンスとして使い易い
その他頻用コマンドのリファレンスは下記の書籍などで補完すればいい。
【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)
- 作者: 沓名亮典,平山智恵
- 出版社/メーカー: 技術評論社
- 発売日: 2009/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 9人 クリック: 99回
- この商品を含むブログ (16件) を見る
・・・とはいえ、やっぱりちょっとだけメモしておくか。笑
シェルスクリプトの1行目
ksh用のシェルスクリプト(./test.shとする)なら下記のように書く。
#!/bin/ksh
1行目に「#!<コマンド>」と記述されていてかつ実行属性をもつようなファイルを実行すると、システムの内部では「<コマンド> <その実行可能ファイル>」が実行される。
つまり、上記例のシェルスクリプトを実行すると、内部的には下記が実行される。
/bin/ksh ./test.sh
すなわち、下記の2つは等価である。
シェルスクリプトの構成
構成要素
- コマンド
- 単純コマンド
- 複合コマンド: if などの構文やサブシェル、関数など
- パイプライン: 1つ以上のコマンドが | 区切りで接続されたもの
- リスト: 1つ以上のパイプラインが ; または 改行 で接続されたもの
構成
リストが複合コマンドの一部となるため、循環構造になっている
移植性を考慮した選択
出力と終了ステータス
出力と終了ステータスは異なる。
if構文の真偽判定は、条件判定部に記述されたリストの終了ステータスをもって為される。
test コマンドは判定結果を出力ではなく終了ステータス(※ $? で参照できる)で表現している。
関数の return の値も終了ステータスである。 `関数` を実行した場合、他の言語でいうところの戻り値として得られるものは出力内容であって、 return コマンドの引数である終了ステータスではない。