shell scriptでoxゲーム
Shellを触る機会があったので試しに作ってみたというだけの記事。
コードは以下のgitにあります。
oxgame_bash
動機
最近Linux/Unixマシンの使い方入門みたいな研修を受け、その中でちょっとしたscriptを組む機会があった。
せっかくだからこの知識を何かに活かせないかということで、とりあえずゲームでも作ってみるかってなった。
はまったところ
- 独特の記法(制御構文, 条件文)
今までまともにスクリプトを組んだことがないので、まず
if [ 条件文 ]; then
fi
みたいな構文に苦戦した。
また、条件文も数値の場合は -eq(equal), -ne(not equal), -a(and), -o(or)など今までにない感じだった。
* 2次元配列の扱い 調べて最初に出てきた方法でやったが、結構力技っぽいらしくて色々苦戦したのがここ。 - 初期化・代入 eval使わないとできないのか・・・ ``` for ((x=0; x<$size; x++)) { for ((y=0; y<$size; y++)) { eval ARRAY${x}${y}=$none } } ``` - 参照 こっちも普通に$ARRAY${x}${y}にするとうまくいかず・・・ ``` if [ $((ARRAY${x}${y})) -eq $none ]; then ```
* 関数の返り値 もともと正常終了かどうかのコードを返すものなので、1-255までの値しか返せないとのこと。(http://shellscript.sunone.me/function.html) 今回はこの制限は特に問題なかったが、返り値の取得でちょっと詰まってしまった。(以下は"judge_winner"関数の返り値をwinnerで取得する場合の例) ``` judge_winner$ winner=$?$ ```
感想
こういうものを作るのものでは無いとわかってはいたが、予想以上の苦戦を強いられた。研修ではsu時にユーザが存在しない場合、自動作成するスクリプトを書いてみて、うまくbashのコマンドを使えば便利なものが作れそうな気がした。なので、今度は時間があればこっちの方向で何か作ってみたい。