ご挨拶
こんにちは、こんばんは、sarcasistではサーバーの管理と団長をしています、arumuko (@arumuko)と申します。
本題
前振り
みなさんシェルスクリプトで配列を使いたいときはどうしていますか?
こういう感じですかね?
- hairetsu.sh
#/usr/bin/sh ARRAY=(a b c d) echo ${ARRAY[*]} echo ${ARRAY[1]} echo ${#ARRAY[*]}
・実行
$ sh hairetsu.sh a b c d b 4
こんな感じで表示されますね。
ちょっと待った!
それ本当にsh
ですか
sh hairetsu.sh hairetsu.sh: 2: hairetsu.sh: Syntax error: "(" unexpected
こうなってませんか?
そのsh
は bash
じゃありませんか?
shでは配列が使えないはずではないでしょうか? (すいません。ソースは探せていません。)
ってことで、sh
で配列を扱ってみました。
やってみる
こんな感じになりました。
- hairetsu2.sh
#!/bin/sh ARRAY='a b c d' echo $ARRAY echo $(echo $ARRAY | cut -d ' ' -f 2) echo $(echo $ARRAY | tr ' ' '\n' | wc -l)
・実行
$ sh hairetsu2.sh a b c d b 4
こんな感じで表示されますね。
要素で繰り返ししたいときはこんな感じ
- loop.sh
#!/bin/sh ARRAY='a b c d' LENGTH=`echo $ARRAY | tr ' ' '\n' | wc -l` for i in `seq $LENGTH` do ELEMENT=`echo $ARRAY | cut -d ' ' -f $i` echo "$ELEMENT is hoge?" done
・実行
$ sh loop.sh a is hoge? b is hoge? c is hoge? d is hoge?
まとめ
これで配列を使わずにループを扱えそうです。
sarcasistの活動の中でもシェルを扱うことがよくありますので、シェルに興味がある方はsarcasistのブログの定期的なチェックをよろしくお願いします。