2015-08-23 3 views
-1

Я написал этот код для ping нескольких IP-адресов, но он не работает. Может кто-нибудь, пожалуйста, скажите мне, что здесь не так?Почему моя последовательность приводит к «синтаксической ошибке возле неожиданного токена»?

#!/bin/bash 
for i in 'seq 1 20' do 
    ping -c 1 "10.88.209.$i"; 
done 

пс: ошибка она показывает это => ./ping.sh: строка 3: "10.88.209 $ я" ошибка синтаксиса около неожиданной лексемы ping' ./ping.sh: line 3: пинг -c 1;»

+0

backticks вокруг команды и точки с запятой перед выполнением: 'for i in \' seq 1 20 \ '; do ..' – amdixon

+0

См. http://stackoverflow.com/questions/32163619/whats-the-difference-between-and-in-bash – Cyrus

+0

./ping.sh: строка 4: синтаксическая ошибка рядом с неожиданным токеном 'ping ' ./ping.sh: строка 4: '\t ping -c 1" 10.88.209. $ I "; ' Это ошибка, показываемая –

ответ

1

Ваш синтаксис нарушен. Одиночные кавычки и обратные метки не являются взаимозаменяемыми, а для циклов требуется точка с запятой или новая строка перед ключевым словом do. Например:

#!/usr/bin/env bash 

for i in `seq 1 20`; do 
    ping -c 1 "10.88.209.${i}" 
done 

Вместо нерест SEQ, вы можете также использовать более эффективно (и более идиоматических) Bash brace-expansion sequence. Например:

#!/usr/bin/env bash 

for i in {1..20}; do 
    ping -c 1 "10.88.209.${i}" 
done 
2

Использование:

for i in $(seq 1 20); do 

или

for i in {1..20}; do 

или

for ((i=0;i<=20;i++)); do 

устаревшее:

for i in `seq 1 20`; do 
+0

Почему последний из них устарел? – higuaro

+0

Пожалуйста, см. Подробную публикацию slm в [Unix & Linux] (http://unix.stackexchange.com/a/126928/74329) в эту тему. – Cyrus

Смежные вопросы