はじめに
未経験からエンジニアに転職し、まだ2か月ほどしか経っていないですが
バッチ処理をシェルスクリプトで作ったので取り組む前の自分へ向けてのアドバイスのように教訓を記事に書きます。
少しでも初心者の方の役に立てばと思います。
初心者にありがちな過ちとそこから得た教訓
私が犯した初心者あるあるな過ちをあげていきます。
すべて教わったことですが、自分自身の反省の意味も込めて…
①コードを書く
インデント
・ない時
for j in {0..9};
do
for i in ${dir_list[@]} do
sh process.sh ${i} ${j}
done
done
・ある時
for j in {0..9};
do
for i in ${dir_list[@]}
do
sh process.sh ${i} ${j}
done
done
forやwhileなどが複数重なってくるとややこしくなってきます。
コードを見る人のことを考えたら、インデントを入れて綺麗に書くにこしたことはないです。
コメントアウト
以下のように、コードの中にコメントアウトを、#を使って何かの処理の度に入れていくと、
自分があとで見返すときも人に見てもらうときも、見やすくて便利&親切です。
# S3からオブジェクトダウンロード
# 直前処理でエラー起きたら終了
S3OBJ=(S3内のオブジェクト)
LOCALDIR=(ローカルディレクトリ)
s3cmd --no-progress -f get ${S3OBJ} ${LOCALDIR}
if [ $? -ne 0 ]; then exit 1; fi
rmコマンドは安易に使わない
大事なものを消してしまう可能性があるから。
特に引数やワイルドカードを伴ったものは注意。引数を読み込まずに*が残って…
rm *
自分が作ったものだけなら良いですが、人が作ったものがあるサーバーでは細心の注意を。
②コマンド実行する
オプション -x
スクリプト実行時にオプション-xを使うと、スクリプト実行したときに途中どういう処理をしているかがわかります。
# !/bin/bash
R_NUMBER=$(($RANDOM % 10))
mod=$((${R_NUMBER} % 2))
if [ ${mod} = 0 ]; then
echo "偶数です"
else
echo "奇数です"
fi
実行結果
sh -x test.sh
+ R_NUMBER=8
+ mod=0
+ '[' 0 = 0 ']'
+ echo 偶数です
偶数です
このように、シェルの中身の処理が具体的に示されるので
エラーが起きても、どこでエラーが起きたかが一目瞭然になります。
初心者にとってはありがたいオプションなので使っていきたいです。
lessコマンドとviコマンド
シェルをviコマンドでテキスト編集する癖がついて、シェルの中身をみるときにviコマンドで見ていました。(lessコマンドを知らなかっただけですが)
既存の出来上がったシェルを参考にしたいと思ったときにviコマンド叩いて中身書き換えちゃった…
なんてことのないように、初心者はlessコマンドを覚えたいところです。
Tabキーを押す
未だにこの癖が身についていないですが
コマンドを打つとき、ファイル・ディレクトリやパスを打っている途中でTabキーを押すとカレントディレクトリ内で一致するファイルやディレクトリが自然と入力されます。
複数一致するものがあるときはさらにTabキーを押すと、候補が出てきます。
コマンド打つときに便利なのでもっと多用したいです。
③その他いろいろ
シェルの名前どうしよう
そのシェルの役割を英語にして名づければいいわけですが、用語がわかっていないと意外と難しかったです。
(恥ずかしながら私はラッパーの意味を理解するのに結構時間がかかりました…)
計画してから書く
計画を意識して書けば、もっと効率的に書けると思いました。
シェルごとの役割・全体の流れを計画してから書く。
おわりに
今回はBashを使いましたが、きっとどんな言語で何を書くにも共通して活かせる教訓もあるかと思いました。まだまだエンジニアとしては駆け出しですが、簡単な記事から投稿しつつ自分のインプットにつなげられればと思います。指摘する点ありましたら、コメントでお願いします。