синтаксис для создания переменной вне команды с апострофом в ней [closed]

Уровень NOOB: ужасен в синтаксисе, регулярных выражениях и программировании на BASH в целом, но учусь и учусь на Lin +

Я бы хотел запустить этот скрипт, но ему явно не нравится мой синтаксис.

Просто чтобы проверить, правильно ли создается переменная, я повторяю вывод, но позже переменная будет изменена, чтобы определить, какой статический IP-файл нужно объединить в / etc / network / interfaces и какой список IP-адресов сетевых хостов. для сканирования с помощью NMAP, получения журналов и т. д.

вот сценарий:

#!/bin/bash
# Script to grab the System IP and Gateway Addresses and use them to
# determine which other scripts to run my network scans with

ip=$(ip a | grep 'global[ \t]' | awk '{print $2}')
gateway=$('route -n | grep 'UG[ \t]' | awk '{print $2}')

echo $ip
echo $gateway

done

Вот результат:


./test: 11: ./test: Syntax error: Unterminated quoted string

Когда я помещаю "" вместо () следующим образом:

ip=$"ip a | grep 'global[ \t]' | awk '{print $2}'"
gateway=$"'route -n | grep 'UG[ \t]' | awk '{print $2}'"

Вот результат :

$ip a | grep 'global[   ]' | awk '{print }'
$'route -n | grep 'UG[  ]' | awk '{print }'

Если я удалю $, результат будет таким же. Он просто печатает команду с апострофом и не выводит результат указанной команды.

Что я делаю не так?

1
задан 17 May 2019 в 15:25

1 ответ

У вас, кажется, нет ненужного символа ' перед командой маршрута. Это приводит к неопределенному сообщению об ошибке в кавычках, так как у вас нечетное количество апострофов.

Измените

gateway=$('route -n | grep 'UG[ \t]' | awk '{print $2}')

на

gateway=$(route -n | grep 'UG[ \t]' | awk '{print $2}')

Подсветка синтаксиса, предоставляемая форматированием кода в Stack Exchange, на самом деле помогает заметить это. Строки в кавычках показаны красным, а без кавычек - черными.

0
ответ дан 17 May 2019 в 15:25

Другие вопросы по тегам:

Похожие вопросы: