2016-12-13 18 views
0

私は関数を作成しました。スクリプトを実行するたびに、ボックスがクラッシュするまで何千ものプロセスが生成されます。私は何がうまくいかないのか分かりません。どんな助けもありがとうございます。Bash関数とforループ

ping() { 
    for i in {1..254}; 
    do 
     (ping -c1 -W1 10.0.0.$i) 
    done 
while true; 
do 
    read -rep $'What method do you want to use' method 
    if [ $method == "ping" ]; 
    then 
     ping 
    else 
     echo "Wrong method" 
done 
+0

ところで - '場合は[$方法== "ピング"]' 'べきであるならば[ "$方式"=ピング] '。文字列分割やグロブを防ぐために、展開を引用符で囲む必要があります。リテラルスペース、グロブ文字、&cを含まないことが知られている定数文字列。しないでください。そして '=='は 'test'で有効な演算子ではありません.bashは拡張機能として提供しています。なぜならあなたのコードはテスト時に動作しますが、POSIXは' = 'のみを指定するからです。 –

+0

... http://shellcheck.net/でコードを実行することを検討してください。 –

+0

@SachinMokashi、あなたの編集 - 複数行のコードブロックは、バックスペースではなく4つのスペースインデントでフォーマットする必要があります。エディタの '{}'ボタンを見てください。 –

答えて

2

機能が再帰しています。

command pingを使用すると、関数ではなく実際のpingコマンドを使用することができます。または、ping以外の名前を使用することをお勧めします。

です:

# bad: shadows "ping" with a command that does something different 
# ...but at least it doesn't recurse 
ping() { 
    for ((i=1; i<=254; i++)); do 
    command ping -c1 -W1 "10.0.0.$i" 
    done 
} 

それとも、より良い:

# good: name doesn't shadow the traditional ping command 
pingAll() { 
    for ((i=1; i<=254; i++)); do 
    ping -c1 -W1 "10.0.0.$i" 
    done 
} 
+1

うわー、私はそれを熱心に見ていて、それを完全に逃してしまった。それを修正しました、ありがとう! – AmiNo