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のコマンドを使えば便利なものが作れそうな気がした。なので、今度は時間があればこっちの方向で何か作ってみたい。