2015-09-11 141 views
3

我想要一些可能的(比如字符串)值:a b c。我想要從一個切換到另一個以循環方式:bash中的循環迭代

if [ "$value" == "a" ]; then value=b 
elif [ "$value" == "b"]; then value=c 
elif [ "$value" == "c"]; then value=a 
fi 

有了這樣的方法,可以在這個更有效的方式來完成,這樣我就可以支持多種選項,如a b c ... z

+0

如果什麼'A-> B'和'B->了'做一個圓形? – luoluo

回答

0

您可以使用bash陣列

vals=('a' 'b' 'c') 
value=$1 

max=$((${#vals[@]} - 1)) 
count=0 
while [ "$value" != "${vals[count]}" ] 
do 
    count=$(($count + 1)) 
done 
if [ $count -eq $max ]; then 
    count=0 
else 
    count=$(($count + 1)) 
fi 
echo ${vals[count]} 
+2

也可以使用mod運算符和數組長度來簡化你的if else構造 – amdixon

1

這是可以做到這樣的:

get_next() 
{ 
    __current_i=${__current_i:- 0} # global variable that saves index of current value 
    [ $__current_i -ge $# ] && __current_i=0 # if we exceed the number of values, then reset to zero 
    shift $__current_i # move to current value 
    ((__current_i++)) # increment index 
    echo $1 
} 

val="a b c d" 

get_next $val 
get_next $val 
get_next $val 
get_next $val 
get_next $val 
0

爲什麼這麼複雜?

這會做你想要什麼:

while true; do 
    for x in a b c; do 
    echo "$x" 
    done 
done 
+0

echo a b c更簡單 – sureshvv