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

% 演算子を使用します。次のように、エコーを必要なコマンドに置き換えます

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

バシズムを気にしないのであれば、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 に答える