переменная не принимает значение в сценарии bash linux - PullRequest
1 голос
/ 08 апреля 2020

У меня есть следующий фрагмент кода из скрипта bash, и для некоторой повторной строки $ не принимайте никакого значения для второй строки.

cat address.txt | while read line || [[ -n $line ]];
do
echo $line
 /opt/vyatta/sbin/vyatta-cfg-cmd-wrapper set firewall group address-group ag-Blacklist address $line #here we dont have value for it
done;

содержимое файла address.txt (только один строка)

96.64.59.185

Вывод из моего сценария:

. / script. sh 96.64.59.185 ./script . sh: строка 9: 13990 Ошибка сегментации / opt / vyatta / sbin / vyatta-cfg-cmd-wrapper set группа адресов межсетевого экрана группа адресов ag-Blacklist адрес $ line

Может ли кто-нибудь помочь мне понять почему? Спасибо

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Я нашел в конечном итоге решение, которое отлично работает. Позвольте мне поделиться с вами

  cfg="/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper"

$cfg begin
$cfg delete firewall group address-group ag-Blacklist
$cfg set firewall group address-group ag-Blacklist description "Designated threat addresses"

for line in $(cat /home/address.txt)
 do
  echo $line
  $cfg set firewall group address-group ag-Blacklist address ${line}
 done;

$cfg commit
$cfg end

Как эта работа отлично без каких-либо проблем. Спасибо за интерес, ребята.

0 голосов
/ 08 апреля 2020

Тест -n не имеет смысла. Чтобы прочитать al oop построчно, просто выполните

while read line
do
   echo Read line "'$line'"
   ...
done <address.txt

Если l oop по-прежнему обрабатывает только одну строку, входной файл имеет только одну строку (проверьте его с помощью wc -l <address.txt).

Конечно, вы можете пропускать пустые строки, если хотите:

while read line
do
   if [[ -n $line ]]
   then
     echo Process line "'$line'"
     ...
   else
     echo Empty Line skipped
   fi
done <address.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...