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

Уровень 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 ответ

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

+ Изменить

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

в

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

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

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