0

我想每 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

4 回答 4

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
于 2012-06-21T11:53:18.823 回答
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
于 2012-06-21T16:45:21.173 回答
2

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

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

    count=$(( $count + 1 ))
done
于 2012-06-21T11:55:19.447 回答
0

如果您不介意 bashism,您可以通过使用 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)改用。

于 2012-06-21T12:31:55.033 回答