久しぶりにbashネタ
追記:shiftはjavaでいうとiteratorと似てる動きをするので進んでしまったオプションは取得できない問題があったので修正
いままで引数処理で$1とかを使っていたが、このやり方では引数の順番を気にしないといけない
やりたいのはsshの-lオプションみたいに指定したい。
つまり
ssh -l hoge 127.0.0.1
ssh 127.0.0.1 -l hoge
こういう感じにどちらでも使えるもの
#!/bin/sh
#引数配列化
array=("$@")
# 引数があればシーケンスで処理。指定オプションを見つかればその次の要素で処理
if [ $# -gt 0 ]; then
for i in `seq 0 $(($# -1))`
do
if [ '-l' = ${array[$i]} ]; then
echo ${array[$i +1]}
break
fi
done
fi
これを関数化すれば何個でも対応できる
前回のshift
shiftは進んでしまった引数を取得できなくなるので順次処理などでしか使えないかも。。
#!/bin/sh
for i in `seq 1 $#`
do
echo $1
shift
done
こんな感じの、、、
いいもの知ったとおもったけど、、まあ、そういうこともある。。