第5章:環境

第5章では、環境変数など環境に関して勉強するみたい。ちょっとずつUNIXっぽくなってきました。第10章でシェルスクリプトを書いていくみたいなので、まだ基本の半分って感じです。。。先はまだまだですが、楽しみながらがんばってみまする。

シェルスクリプトを定義する

シェルスクリプトの最初に書く

#! /bin/sh

の「#!」はマジックナンバーで、これを記述することでこのファイルがインタプリタ的に動作するものとして認識される。その後の「/bin/sh」でどのインタプリタを使用するかを明記する。

環境変数

環境変数とは、プロセスが作られたときに引き継がれる「名前とその値」が組になったもの。子プロセスができるときに親プロセスの環境をコピーしてくるので、同じようにシェルスクリプトも親の環境変数を使用することができる。
setコマンドを引数なしで実行すると、今セットされている変数の名前と値の一覧を確認できる。

子の環境を変更

普通に変数を変更しても環境変数はダメ。環境変数を追加・変更するにはexportコマンドを使用する。このコマンドを使用すると、他のプロセスが普通の変数の値を環境変数として認識できるようになる。サンプルは以下の通り

$ CFLAGS=-g
$ export CFLAGS

exportした変数は、他のコマンドやプロセスにも影響を与えるので、他のプロセスやコマンドに影響を与えたくない場合は、

(CFLAGS=-g; export CFLAGS; コマンド)

もしくは

CFLAGS=-g コマンド)

PATH変数

PATH変数にはディレクトリの一覧が入っており、何かをコマンドを打ったときにそのディレクトリを順番にコマンドが入っていないかを調べてあれば実行する。左のパスから実行してくるのでディレクトリの順番が重要となる。シェルの組み込みコマンドの方がPATH変数より優先度が高い。

シグナルの処理

どんなシグナルがあるかは、/usr/include/sys/signal.hを見ると書いてある。基本的なシグナルを以下に記す。

  • 0
    • 0は実際のシグナルではなく、シェルスクリプトを便利に書こうとするために作られたもの。
    • exitコマンドで終了したり、シェルスクリプトが終わりに達したときにシェルは自分自身にシグナル0を送る。
    • trapに0を指定すると、シェル自身の終了処理を行わせる。
  • 1
    • ハングアップシグナル
    • X windowをクローズしたり、デーモンをリセットしたりするときに使用。
  • 2
    • 割り込みシグナル
    • キーボードからの割り込みを意味する。
    • Ctrl-CやDeleteキーがこれにあたる
  • 3
    • クィットシグナル
    • Ctrl-\を打つと生成できる
  • 9
    • キルシグナル
    • プロセスを強制終了する。
  • 15
    • 終了シグナル
    • アプリケーションを終了させるときに使用する
    • killコマンドのデフォルトのシグナル

trapコマンド

シグナルのキャッチ

trapコマンドでシグナルを受信して処理を行うことができる。例えば、下記の例だと「1とか2のシグナルを受信するとプロセスIDの入ったファイルを削除してスクリプトを抜ける」という動きを行う。

trap 'rm -f /tmp/*.$$; exit 1' 1 2 3 15
シグナルの無視

シグナルを受け取っても、無視してそのまま処理を続けたい時の例。必ず空を指定する。でないと意味が変わってくるので注意。

trap '' 1 2 3 15

シグナルのリセット

trapのコマンドのところに何も書かなかった場合には、シグナル本来の動きをすると言う意味になる。

trapを使った例

スクリプトの終了時に、一時ファイルを消す例。もし、割り込みなどで異常終了してもしっかりと消す。以下にサンプルソース

#! /bin/sh
Cleanup(){
        rm /tmp/*.$$
        exit $1
}
trap 'Cleanup 1' 1 2 3 15
・・・
・・・
Cleanup 0

catの実行中だけ、コマンド入力がcatに渡る例

trap '' 2 3
・・・
・・・
trap ':' 2
cat ファイル
trap '' 2
・・・

リモートシェル

ちょっと興味がわかず、必要になったらと言うことで。。。

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

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

第4章:リダイレクションによるファイル操作

最初に

第1章から書式や変数などの話しばかりで少し飽きてきましたが、どれもシェルスクリプトを書くためには必要な知識なので何とかがんばっていきたいと思いまする。
第4章は25ページほどで、ファイル操作関連の話しがメイン。やっとこさなんだかプログラムっぽっくなってきました。

ファイルディスクリプタ

ファイルに何か書き込みたいときは、ファイルディスクリプタを使ってファイルアクセスをする。このファイルディスクリプタの番号のうち、0,1,3番は予約されており重要なので覚えるべし。

  • 0番 標準入力(通常はキーボードからの入力を受け取る)
  • 1番 標準出力(通常は端末画面への出力、これに書き込めば端末画面にメッセージを出力できる)
  • 2番 標準エラー (通常は端末画面への出力)

リダイレクション

通常の入力や出力先を変更することをリダイレクトと言う。リダイレクト記号として「>」「<」を使用する。「>」でファイルに書き込むと、元々のデータがクリアされるので、追記させたい場合は「>>」で行う。
「>」でファイルへリダイレクトすると、正確には1番のディスクリプタを経由するもをファイルへ向けると言う意味になる。エラーはディスプリタ番号2なので、「>」でファイルに向けてもエラーメッセージはファイルに書き込まれない。それを踏まえ、通常のリダイレクトを正確に書くと下記のようになる。

$ cat xxx 1> abc
xxx: No such file or directory

上記のようにすると、エラーメッセージはディスプリタ2番なのでファイルabcに書き込まれず、画面に表示される。
もし、エラーメッセージをファイルに向けるリダイレクトは以下の通り。これを利用すれば、エラーメッセージだけ別のファイルで保存することができる。

$ cat xxx 2> abc
$ cat: xxx: No such file or directory

もし、エラーメッセージと通常の出力結果も1つのファイルに入れたい場合は下記のようにする。

$ cat abc xxx > nnn 2>&1

リダイレクトの記号「>」は、どの場所に書いてもいいが、通常は最後に書くのが普通。もしリダイレクトを複数に書いたりした場合は「左から右」へとなる。例えばあるコマンドの実行結果やエラーメッセージをすべて消し去るときの例は下記のようになる。下記のコマンドだと、コマンドの標準出力を/dev/nullへ書き込み、それから標準エラー(ファイルディスプリタ2)も標準出力(ファイルディスプリタ1)へ行くように書き込んでいる。すでに標準エラーは/dev/nullへ向かっているので、結果、標準エラーも/dev/nullへ行く。

コマンド > /dev/null 2>&1

リダイレクトは、変数でも可能。

STDOUT=/dev/null
コマンド > $STDOUT

標準出入力を扱うものとしてパイプ(|)がある。パイプの左側の標準出力をパイプの右側の標準入力にすると言う意味になる。

リダイレクトを使った書き込み

echoコマンドは標準出力にメッセージを出力する。もし、echoコマンドで標準エラーにメッセージを出力したい場合は下記のように書く。

echo "Error messages." 1>&2

もし、3以上のファイルディスプリタへ書き込みしたい場合は

$ echo abcdef 1>&8
$ exec 8> hhh
$ echo abcdf 1>&8

ディスプリタは、リダイレクト先のファイルがなければ自動で作ってくれる。

リダイレクトでの読み込み

標準入力も、もちろんリダイレクトできる。キーボードからの入力の代わりにファイルをそのままリダイレクトする。例としては以下の通り。

commmand < file

また、ファイルではなく書いてある文字列とかをそのまま入力することも可能。

command << word

これを「ヒア・ドキュメント」と言う。

ファイルサイズを0にする。

/dev/nullを利用する。エディタで開いて中身を消しても1バイトだけ残ってしまうので。下記のどちらでも大丈夫。

$ cat /dev/null > file
$cp /dev/null file

ヒア・ドキュメント(Here Documents)

1つのシェルスクリプトの中に、入力する文字も同時に書いてしまう方法のこと。最初に現れた文字列がもう一度出てきたら、そこまでを入力として認識する。一般的にはENDなどを使用。以下にサンプルをば。最初のEND以降で、2回目のENDまでが標準入力として扱う。

$ cat << END
> This is a
> input data.
> END
|

上記のとき、変数を標準入力から渡すことも可能。逆に、$DIRなどを変数としてではなく文字列として「$DIR」として扱わせる方法は「\$DIR」と文字列だけをクォートする方法と、下記のようにヒア・ドキュメント全体をクォートする方法がある。後者の方がわかりやすくていい。

$ DIR=document
$ cat << \END
> This is a
> here $DIR.
> END
This is a
here $DIR.

ほかにもクォートする方法として、ENDをシングルクォーテーションで括弧っても同じようになります。('END')<<の後にハイフン(-)をつけると、ヒア・ドキュメントの部分の先頭のタブ(スペースはダメ)は入力されていないものとして扱う。インデントを無視させたいときに使用する。例えば下記のような書き方をしておけばわかりやすい。

then
      command  <<- END
            This is a here document.
      END
fi

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

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

第3章:シェル関数、組み込みコマンド

とりあえず、この第3章ではシェルスクリプトをさらに小さくした1つの固まりのコマンドだと言う程度の理解で十分で、詳しくは第9章でやるらしい。この章では、関数を使う上での注意点を見ていくようだ。

シェル関数

古くからある機能で、よく使われる機能で、一連のコマンドを単に処理するだけ。関数なので戻り値も設定できる。たとえば、ls -lと同じ動作をするシェル関数lslを作成する。

$ lsl(){
> ls -l
> }

動作状態による違い

定義した関数を実行すると、それはそのシェルの中で動作する。しかし、関数内でリダイレクトとかをさせると、サブシェルを作って動作する。
関数が、サブシェルで動作するかどうかによって、動作上の違いある。

ディレクト

関数終了時のディレクトリが変わる。
関数内でディレクトリを移動する動作を行ったとき、カレントシェルの場合にはその変更内容が残る。しかし、サブシェルの場合には、関数が終了すれば元のディレクトリに戻る。

変数

関数終了時に変数の内容が変わる。
関数内で変数に対して何か処理を行ったとき、カレントシェルの場合にはその変更内容が残る。しかし、サブシェルの場合には関数が終了すれば元の値に戻る。

exitコマンド

シェルが終了するかどうかが変わる。
関数内でexitコマンドを実行したとき、カレントシェルで実行している場合にはそのシェル自体が終了する。しかし、サブシェルの場合にはその関数が終了するだけ。

引数に関する注意

位置パラメータの$0の値が、シェルスクリプトとシェル関数では異なる。シェルスクリプトだと、$0はそのスクリプトの名前が格納されるが、シェル関数ではそのシェル関数を呼び出したシェルが格納される。
シェル関数の場合

$ display(){
> echo $0 $1 $2 $3
> }
$ display aaa bbb ccc
/bin/bash aaa bbb ccc

シェルスクリプトの場合

$ cat display
#! /bin/sh
echo $0 $1 $2 $3
$ ./display aaa bbb ccc 
./display aaa bbb ccc

変数に関して

シェルスクリプトを1つ作成すると、そのシェルスクリプトで使用させる変数や関数で使用される変数すべてが格納されるテーブルが1つ用意される。1つのシェルスクリプト内の複数の関数で、同じ変数名を使用しているとその変数は同じ変数として処理されてしまう。なので、変数を使用するときは異なる変数名を使うように気をつけるべし。

関数をカレントシェルで動作させる方法

通常、シェルスクリプトに書かれているコマンドは、そのシェルスクリプト内で動作する。決して、そのシェルスクリプトを実行したシェル上で動く訳ではない。しかし、下記のようにシェルスクリプトを実行するとカレントシェルでそのスクリプト内のコマンドを実行することが可能なる。

$ . シェルスクリプト

ちょっとわかりにくいのでソースを見ながら。まず、下記のようなシェルスクリプト書く。

$ cat aaa
#! /bin/sh
pse()
{
ps -ax | sort -bn
}

下記のようにこのスクリプトファイルを実行しても、pseが実行されるわけではありませんし、その後でpseと実行したって実行されるわけがない。

$ ./aaa
$ pse
pse; not found

しかし、先ほどのファイルを.(ドットコマンド)を使って実行するとpseをカレントシェルで実行可能になる。

$ . ./aaa
$ pse
ps -ax | sort -bnの実行結果が表示される

このようなシェルスクリプトは、現在のシェル環境を設定するためのシェルスクリプトとなっている。そこで、このようにシェル環境を設定するためのスクリプトファイルは、ファイルの最後に.shとつけ、さらに、直接実行されないように読み取りのみの権限にしておく。

組み込みコマンド

シェルにはじめから組み込まれているコマンドを組み込みコマンドと言う。個別のコマンドを個別に走らせるより組み込みコマンドを使用したほうが速さやリソース的に効率的らしい。詳しくは後の章で記載されているので、この章では簡単に見ていく。

ヌルコマンド(:)

何もしないが、必ずいつも成功する(真の結果を返す)コマンド。条件判定を必ず真にしたいときによく使用される。たとえば下記に示すようなwhileの場合。下記の例だとヌルコマンドでwhileの条件が必ず真にあるので無限ループになる。

while :
do
  if ....
  then
     break
  if
done
ドットコマンド(.)

新しくプロセスを作らずに、現行のシェルのプロセスを使って指定されたファイルを読み込み実行する。その結果、指定されたファイルに記載されている変数や関数が現行のシェルで使えるようになる。

breakコマンド

forやwhileのループから抜けるときに使うコマンド。いくつかのループをまとめて抜けるときには、breakの後に数字をパラメータとして渡すと抜けることができる。

cdコマンド

指定したディレクトリに移動するコマンド。パラメータがなければ、そのユーザのホームディレクトリに移動する。

continueコマンド

forやwhileでいったんループ内の処理を終えて、またループの最初の処理から行わせたいときに使用する。引数を渡すことで、ネストしている何番目のループに戻るかなんてことも可能。

echoコマンド

引数の部分を標準出力に表示するコマンド。特殊コードを出力させるときだけSystem V系BSD系で異なるらしい。詳しくは12章の汎用性でやる。

evalコマンド

1行に複数のコマンド実行が入っているとき、いっぺんに複数のコマンドを実行してくれる。

execコマンド

execコマンドは、引数のコマンドをカレントシェルのプロセスと置き換えて実行する。

exit

シェルを終了させたいときに使用する。引数を渡すとこのシェルの終了コードを設定することができ、その終了コードは$?に格納される。通常は、正常終了したときには0を格納する。

exportコマンド

パラーメタで指定された変数を、このタイミング以降で実行されたシェルやコマンドで使用できるようにする。通常、変数などは他のシェルからは見えないはずだが、それを見えるようにするのがexportコマンド。詳しくは第5章で。

pwdコマンド

現在いる完全パスを表示する。

readコマンド

キーボードからの入力をreadの後に指定されたものに格納する。readの後の複数の変数を用意すると、複数の入力値も格納できる。このとき、単語をスペースで区切るように使うスペースなどの区切り文字をIFS(Internal Field Separators)と言う。スペースのほかにタブ改行もIFSにあたる。詳しくは第4章、第8章で。

readonlyコマンド

指定された変数を読み出し専用にする。あんまし使用されないみたい。

returnコマンド

シェル関数から抜けるコマンド。returnの後に指定した番号がその関数の終了コードになる。

setコマンド

シェルのオプションをオンにしたりオフにしたりするコマンド。setで位置パラメータの値を設定すると、下記のように位置パラメータの値が全部クリアされるので注意。

$ cat aaa
#! /bin/sh
echo $0 $1 $2 $3 $4
set aa bb cc
echo $0 $1 $2 $3 $4
$ ./aaa 1 2 3 4 5
./aaa 1 2 3 4
./aaa aa bb cc

上記のようにsetで設定し直すことによって、$4の値がリセットされ出力されない。

shiftコマンド

このコマンドは位置パラメータを左にずらす。

testコマンド

ある条件を判定し、条件が真の場合は0、偽の場合は0以外の値を返す。条件として様々な判定をさせることができ、ファイルの読み取りチェックや文字列の長さチェックなどもテスト可能。何が判定できるかあまりに多いので、manを読んだり、サンプルソースで出てきたときにその都度勉強しなおすべし。

trapコマンド

シグナルを受け取ったときに、指定したアクションを実行することが可能。詳しくは第5章で。

typeコマンド

typeコマンドのパラメータにはコマンド名を指定する。パラメータで指定したコマンドの場所などを教えてくれる。サンプルを以下に示す。

$ type date
date is /bin/date
$
umaskコマンド

ファイルを生成するときに、読み書きなどどのモード(権限)で作るかを決定するコマンド。

unsetコマンド

指定した変数や関数を消去するコマンド。ただし、シェルが始めから持っている変数(PATHやIFS)などはunsetできない。

waitコマンド

引数に動作しているプログラムのプロセスIDを渡す。そのプログラムが終わるまで待つ。使い方としては、バックグラウンドで走っている処理が終わるのを待ち、終わったら処理を行いたい場合などに使用する。

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

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

第2章:シェル変数

今度は、第2章ではシェル変数を学ぶ。

シェル変数の基本

  • シェル変数の名前には、大文字、小文字、数字、アンダースコアが使用可能。
  • 変数の最初が数字だけはダメ。
  • 慣習としてアルファベットの大文字を使う。
  • 変数にセットされた数字は、文字列として扱われる。
  • 宣言がいらない。
  • セットされていないものは、ヌル値がセットされている。

シェル変数の宣言

シェル変数を使う時は、$だけか、変数の文字を{}でくくってもいい。

$hoge

もしくは

${hoge}

普通は{}は使わないが、下記の時などは{}を使う。

$ FOO=abc
$ echo ${FOO}BAR
abcBAR

しかし、シェル変数に使えない文字列であれば{}を書かなくても処理ができる。下記の例は、/はシェル変数に使えないのでDIRを{}でくくらなくても大丈夫。

$DIR=/tmp
$ cd $DIR/work
$ pwd
/tmp/work

値がヌルの変数

シェル変数は通常、何か値をセットして宣言するのだが、値をセットしない変数を宣言することも可能。これをアンデファインド変数と言う。宣言の方法は以下の通り。

DIR=

もしくは

DIR=""

=によるシェル変数の設定

シェル変数の値をセットする方法は色々とある。すでに宣言され値がセットされているか、されていないかでセットする値を変えることができる。

$ echo ${XYZ:=123}
123
$ XYZ=xyz
$ echo ${XYZ:=123}
xyz

-によるシェル変数の設定

未使用のときは、変数に値をセットしない。

$ echo ${ABC:-xyz}
xyz
$ echo $ABC
$
$ echo ${ABC:=abc}
abc
$ echo $ABC
abc

?によるシェル変数の設定

?は、変数がこれまで未使用かどうかを確認するときに使用する。

$ echo ${ABC:?"ABC is not set"}
ABC is not set
$ ABC= abc
$ echo ${ABC:?"ABC is not set"}
abc

+によるシェル変数の設定

変数の値を変更せずに、そのときだけ結果を変えたい場合に利用する。

$ echo ${ABC:+aaa}

$ ABC=www
$ echo $ABC
www
$ echo ${ABC:+aaa}
$ echo $ABC
www

特殊な変数

特殊な変数として$?, $S, S!, S-の4つがあります。この変数は「書き込み禁止」です。以下のそれぞれの特徴を記載。

$?変数

$?は「コマンド終了時のステータス」を表す変数。ただし、&を使いバックグランドで実行させた場合には無効。通常、終了時には真(0)、異常終了(失敗)の時には偽(0以外)の値がセットされる。

$$変数

$$変数には、現在動作しているコマンドの「プロセスID」がセットされる。注意としては、中括弧でいくつかのコマンドを使って別のプロセスを起動した場合、$$変数の値は元のプロセスの値を引きづっている。

$!変数

&を使ってコマンドをバックグラウンドで走らせてたときに、そのコマンドのプロセスIDが$!にセットさせる。

$-変数

そのシェルの起動時のフラグやsetコマンドを使って設定したフラグの一覧がセットされる。
下記の例だと、/bin/sh -himBHで実行していると言うことになる。

$ echo $-
himBH

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

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

第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の世界

シェルスクリプトを基本から勉強し直してみる

私事ではありますが昨日から来週の月曜日までの10日間、お休みがとれました。
せっかくなので海外旅行とかに行ってもいいのですが、世の中の情勢も厳しく(っていうか仕事ができないわたくしには世間の情勢なんて本当は関係ありませんが、流行にのって世間のせいにしてみる)いよいよ本当に今の会社をいつ首を切られるかわからない状況になってきたので、気休めにしかならないかもしれませんがちょっと本を買って勉強してみる。(そもそも海外に行くほどお金もなく、本を買うの精一杯。。。)
そこで買ってきたのが「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
ちょっとこれからがんばってみる。
まずはやる内容を把握するために目次を書き出してみる。

  • 第1章 書き方にかかわる基本的な説明
  • 第2章 シェル変数
  • 第3章 シェル関数、組み込みコマンド
  • 第4章 リダイレクションによるファイル操作
  • 第5章 環境
  • 第6章 コマンド行の解析、処理
  • 第7章 フィルタの使用
  • 第8章 シェルのいろいろな機能
  • 第9章 シェル関数の例
  • 第10章 シェルスクリプトの例
  • 第11章 デバッグの手順、手法
  • 第12章 汎用性
  • 第13章 FAQ

全13章なので、1日2章をやっていく感じで10日間ってのは結構厳しいが、がんばってみようと思いまする。本を読破するまで1章ずつ、勉強がてらにこのブログに掲載してみます。

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

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