2012-06-21 6 views
0

인터페이스를 80 초 동안 1 초마다 작동시키고 싶습니다. 어떻게 bash 스크립트로 구현할 수 있습니까?Bash 루프에서 매초 인터페이스를 토글 할 수 있습니까?

이와 비슷한?

COUNT = 80 
for n in $(seq -w 1 $COUNT); do 
    case $n in 
    [1,3,5,7,9....79]*) # I don't know how to represent the odd value only 
     ifconfig veth1 down 
     sleep 1 
     ;; 
    [2,4,6,8,10....80]*) 
     ifconfig veth1 up 
     sleep 1 
     ;; 
    esac 
done 
+0

당신은 그것을 시도? 작동 했나요? 그렇지 않다면 어떤 오류가 발생합니까? 예상되는 실제 출력은 무엇입니까? 그에 따라 질문을 편집하십시오. –

답변

3
COUNT=40 
for n in $(seq -w 1 $COUNT); do 
    ifconfig veth1 down 
    sleep 1 
    ifconfig veth1 up 
    sleep 1 
done 

또는 당신이 정말로 80까지 셀하려는 경우 :

COUNT=80 
for n in $(seq -w 1 $COUNT); do 
    case $n in 
    *[13579]) 
    ifconfig veth1 down 
    ;; 
    *) 
    ifconfig veth1 up 
    ;; 
    esac 
    sleep 1 
done 
+0

+1, 사례 진술을 사용할 필요가 없습니다. – chepner

2

사용 % 연산자를. 다음과 같이, 당신이 bashisms 마음을하지 않는 경우, 당신은 배쉬에서 사용할 수있는 다양한 확장의 사용을 통해 코드가 훨씬 더 간결하게 만들 수 있습니다

count=0 
while [ $count -lt 80 ] 
do 
    if (($count % 2 == 0)) 
    then 
     echo 'aaa' 
    else 
     echo 'bbb' 
    fi 

    count=$(($count + 1)) 
done 
+1

'while ((count <80))'('(count ++))'하지만 Bash가 카운터를 유지하도록하지 않겠습니까? 'for ((count = 0; count <80; count ++))' –

0

원하는 명령 에코를 교체합니다. 예를 들면 :는

for i in {1..80}; do 
    case $((i % 2)) in 
     0) ifconfig veth1 down ;; 
     1) ifconfig veth1 up ;; 
    esac 
    sleep 1 
done 

여기 마법 수가 홀수 또는 짝수인지 결정하는 나머지 연산자로 결합 {1..80} 연속 식이다. 어떤 이유로 Bash 버전이 시퀀스 표현식을 지원하지 않는다면 대신 $(seq 1 80)을 사용하십시오. 플래그 전환

+0

거의 8 년 전에 배쉬 3에 시퀀스 표현이 도입되었습니다. –

+0

@DennisWilliamson 당신 말이 맞아 ... 배쉬에서 추가 된 것은 시퀀스 식 * increment *입니다. 예제에서 시퀀스 증가분을 사용하지 않기 때문에 답변을 업데이트 할 것입니다. –

+0

시퀀스 표현은 좋지만 변수를 사용할 수없는 것 같습니다. 즉,'c = 4; echo {1 .. $ c}'는'1 2 3 4'를 반환하지 않지만'{1..4}'는 반환합니다. 이를 확장하려면 '평가'해야합니다. 그리고 만약'eval'이 대답이라면 ..... 어쨌든'$ ((i % 2)) '에 대해서는 +1이되고, 융통성의 상실로 인해 {1..80}에 대해서는 -1이됩니다. – Graham

3

는 :

#!/bin/bash 
for ((i = 1, flag = 0; i <= 80; i++)) 
do 
    if ((flag ^= 1)) 
    then 
     ifconfig veth1 down # odd 
    else 
     ifconfig veth1 up 
    fi 
    sleep 1 
done 
+0

+1은 쉘 스크립트에서 * 비트 배타적 OR *에 대한 사용을 찾습니다. –