如何在Bash循环中每秒切换一个界面?

时间:2012-06-21 11:45:09

标签: bash for-loop ifconfig network-interface

我想每隔1秒向下放一个界面80次,我怎样才能通过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 

4 个答案:

答案 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

答案 1 :(得分: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

答案 2 :(得分:2)

使用%运算符。如下所示,用你想要的命令替换echo

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

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

答案 3 :(得分:0)

如果您不介意这些基础知识,可以通过使用Bash中提供的各种扩展来使您的代码更加简洁。例如:

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)