Синтаксис для создания переменной вне команды с апострофом в нем
Уровень 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, на самом деле помогает заметить это. Строки в кавычках показаны красным, а без кавычек - черными.