Использование переменной окружения (получить ее значение из команды awk) в качестве условия в то время как - PullRequest
0 голосов
/ 03 апреля 2012

Я использую awk в переменной окружения:

 NUMBER_OF_PORTS=`awk /^"number of ports:"/'{print $4}' Config_input.txt`

, которая возвращает значение 2.Я пытаюсь использовать эту переменную в цикле while:

i=1     
while (("$i" <= "$NUMBER_OF_PORTS")); do          
   echo "hello hello $i"  
   i=$(( $i+1 ))  
done

Я получаю следующую ошибку:

-bash: ((: 1 <=: синтаксическая ошибка: ожидается операнд(токен ошибки "<=") </p>

Как использовать переменную в качестве целого числа и решить эту проблему?

РЕДАКТИРОВАТЬ
, даже если япопробуйте выполнить простую операцию, такую ​​как:

let cc = $ NUMBER_OF_PORTS + 0

это не работает. Это то, что переменная содержит команду awkЕсли я установлю cc = 5 и попытаюсь реализовать while с помощью $ cc, он будет работать нормально.

Пример кода

 echo $NUMBER_OF_PORTS  
 #i=1  
 #echo $i  
 for (( i = 1; i < ${NUMBER_OF_PORTS}; i += 1 ));  
 do  
       echo "hello hello $i"  
 done

вывод:

$ run_auto_config
2
1
: ожидается целочисленное выражение

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

NUMBER_OF_PORTS пусто. Это дает мне ту же ошибку:

i=1
NUMBER_OF_PORTS=""
while (("$i" <= "$NUMBER_OF_PORTS")); do
  echo "hello hello $i"
  i=$(( $i+1 ))
done

Ваша команда awk выглядит очень неловко. Попробуйте это:

NUMBER_OF_PORTS=$(awk '/^number of ports:/ {print $4}' Config_input.txt)

Вы уверены, что строка "количество портов:" появляется в вашем текстовом файле? Есть ли пробел после двоеточия?

Несколько комментариев о вашем цикле while: ((...)) - это арифметическая оценка, поэтому вам не нужны строки там. Кроме того, можно использовать только имена переменных (без $), поэтому вы можете написать немного более элегантно:

while (( i <= NUMBER_OF_PORTS )); do
  echo "hello hello $i"
  (( i++ ))
done

Обновление: На основании вашего комментария попробуйте это:

NUMBER_OF_PORTS=$(awk -v RS='\r\n' '/^number of ports:/ {print $4}' Config_input.txt)
0 голосов
/ 03 апреля 2012

Вы также можете заменить цикл while на цикл for:

for (( i = 1; i <= ${NUMBER_OF_PORTS}; i += 1 ));
do
    echo "hello hello $i"
done
0 голосов
/ 03 апреля 2012

измените свою строку в то время как:

 while [ $i -le $NUMBER_OF_PORTS ]; do

, затем попробуйте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...