シェルスクリプトを書きます。
shを使います。shを使いましょう。
一連の作業の中で「ディレクトリが既に存在するか確認する」ということをshell scriptで実現する場合を考えます。
if statement
sample_003.sh
#! /bin/sh
dir_name=generated_dir
if [ ! -d ${dir_name} ]; then
mkdir ${dir_name}
else
echo ${dir_name}
echo 'such directory exists'
exit
fi
if | 条件 |
! | 否定 |
-d | ファイルが存在して、それがディレクトリである |
else | 条件以外 |
fi | ifを閉じる |
下記はdir_nameという変数を作り、文字列generated_dirを入れるという操作を意味します。
dir_name=generated_dir
変数dir_nameは$dir_nameまたは${dir_name}として使うことが出来ます。
mkdirについては下記で説明しています。
ディレクトリを作成する
「UNIXにおいてディレクトリもファイルだ」ということについては下記を参照ください。
fileとdirectory
上述のshは下記から一部を抜粋して使いました。
7層のネットワークを動かす 1
実用に耐えるものを
sample_003.sh.practical
#! /bin/sh
# for test
date "+%Y_%m_%d_%H_%M"
# for test
# exit
dir_name=generated_dir_`date "+%Y_%m_%d_%H_%M"`
if [ ! -d ${dir_name} ]; then
mkdir ${dir_name}
else
echo ${dir_name}
echo 'directory exists'
exit
fi
dateコマンドはUNIXコマンドで現在の日時を出力します。上記で「分」までを出力させています。
dateコマンドは仕様がややこしいのでexitを使って期待の出力になるまで動作確認します。
sheel scriptの中では逆引用符で囲むと、UNIXコマンドを実行させてその結果を得ることが出来ます。
上記ではdateコマンドの結果を文字列として受けて、それを使っています。
ほとんどの人が使ったことがないと思われる逆引用符(back quote)ですが、このようにshell scriptでは非常に重要な責を担っています。
下記も利用すると、かなり便利になると思います。
-f | ファイルが存在して、それがファイルである |
-e | ファイルが存在する(=ファイルでもいいし、ディレクトリでもいい) |
string1 = string2 | 文字列string1と文字列string2が等しいか判定 |
string1 != string2 | 文字列string1と文字列string2が異なるか判定 |
まとめ
shell scriptの文法は丸暗記するものでもないと思っています。
例えば上記を雛形とすればshell scriptでif statementは書けるはずです。
大学生や若手がshell scriptを使わずに物凄い無駄を繰り返していることをまずはやめてもらいたいという思いがあります。
手作業の繰り返しと、それに誘発されるミスと、ミスした結果を使ってしまうこと、は無駄です。
bashでもcshでもありません。shです。shで書いたらみんな幸せです。
みんなで幸せになりましょう。
広告
IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト