インターン2週目ほどして
インターンを開始して多分2週目くらいになるのではないかなと思います。
初日は社長とお話など(打ち合わせ)をしてだいたい時間は潰れてしまいましたが、この日から黙々と勉強が始まりました(業務をやらせてもらえるのはLinux、Bシェル、Mysql、Perlが終わるまでなのでそれまで自分で勉強)。
まず僕は、UNIXやLinuxなどの知識があまりなかったため、楽しいUNIXという本を渡され、それをやることになりました。この本は基本的なUNIX系コマンドの基礎を覚えるためにさっと読み終えるという感じでした。もともと知っているところは飛ばしても良いということだったので、2日目には読み終えてました。
その次に渡された本は、実習UNIXシェル第2版というちょっと古いものでした。若干動きが変だったり、楽しいUNIXに比べるとやはり難易度が上がったという印象でした。実際この本で行ったところは一番最初の章の楽しいUNIXでやったところの復習と業務で使うのは主にBシェルのようなのでそこだけを読み終えるだけでしたが、3,4日は読み終えるにかかってしましました。
実習UNIXシェルが読み終えた頃、どこまで覚えられているか、すんなりコマンドが出てくるようになるまで反復させて覚えさせるという元、社長から簡単な?課題が出されました。
課題の内容は、ファイル漢字変換コードを作成するというものでした。
仕様など詳しい条件が提示されているため、かなり解きやすかったです。以下より、自分で作成したものを合っているのか分かりませんが、確認を込めて記載します。
仕様等:
・漢字変換はiconvコマンドを使う。
・パラメータチェックを行う
1.パラメータは4つないと×
2.パラメータ3は存在していないと×
また、0バイトも×
3.パラメータ4は存在してい0バイトの時は、警告メッセージを表示してスルー
4.パラメータ4は、存在していて0バイトより大きい場合は×
5.パラメータ1=パラメータ2は×
6.パラメータ3=パラメータ4はOK(この場合は、一旦作業ファイルを使って元を破壊しないように)
以上
コード:
#!/bin/sh
ここからBシェルを読みますという決まり文句
・パラメータが指定されているか確認を行う。$1=$2はエラーにするようにする。
if [ ! "$1" -o ! "$2" -o ! "$3" -o ! "$4" ]; then #$1~4に値がないなら
echo "Error: parameter is no value"
exit 9
#$1と$2は同じ引数を指定させない
elif [ "$1" = "$2" ]; then #$1=$2なら
echo "Error: $1,$2 value is equal"
exit 9
fi
ここはまぁこんな感じで良いと思います。
・値の確認ができたので$1~4を変数にする。ここでは特に意味を持たないので名前は適当にpar1~4とする。
par1="$1"
par2="$2"
par3="$3"
par4="$4"
変数にしないとあとで仕様変更した時に変えるのが大変。
・par3というファイルが存在しているのか確認を行う。同時に0バイトじゃないかも判定する。存在していない場合とファイルサイズが1バイト以上ならエラーにする。
if ! [ -f $par3 ]; then #$par3のファイルが存在しないなら
echo "Error: $par3 is no file"
exit 9
elif ! [ -s $par3 ]; then #$par3のファイルサイズが0バイトなら
echo "Error: $par3 is no data"
exit 9
else
outf=$par3 #変数outfに$par3を代入
fi
ファイルの存在の有無やファイルサイズを調べてパラメータチェックをする時、テストコマンドを使えばよかっただけだったがしばらく悩んでしまった。本で読んだことをまるで覚えていなかった....
・par4は、存在していて0バイトの時は、警告。存在していて1バイト以上はエラーとする。
if ! [ $par3 = $par4 ]; then
if [ -f $par4 ]; then
true
if [ ! -s $par4 ]; then
echo "Warrning"
else
echo "Error: $par4 file is exist"
exit 9
fi
fi
else
cat $par3 >$par3.tmpf
outf=$par3.tmpf
fi
par4が存在していて1バイト以上はエラーなのに、par3=par4を認めるということは、矛盾している(par3は1バイト以上でないとダメなので)。ここで詰まってしまいました。ここはif ! [ $par3 = $par4 ];ならという否定の文を入れることで、par3=par4を回避させました。
iconv -f $par1 -t $par2 $outf > $par4
これはそのままですね。
以上
こんな感じで一応うまく動きました。少し時間をかけてしまいましたが、慣れるまでは仕方ないかな...これからガンガン頑張って行きたいと思います。
祝日で休みや用事などで休んでしまったため、他のインターンの子よりだいぶ遅れてしまっているので急がねば。まぁ3週早く向こうはインターンを始めているので気にし過ぎもよくないと思いますけどね(笑
ではでは〜