Я работаю над скриптом, который использует getopts для ввода регулярного выражения как часть одной из опций. Этот параметр должен запустить выражение для указанного файла и распечатать результаты в командной строке.Регулярные выражения в bash
У меня есть это сохранение выражения в переменной, но тогда я не знаю, как правильно запустить выражение оттуда. Ниже приведены соответствующие разделы моего кода.
#!/bin/bash
file=""
sreg=""
search=false
while getopts c:s: flag; do
case $flag in
c) #file name
if ! [ -w "$OPTARG" ]
then
echo > "$OPTARG"
fi
file="$OPTARG";
;;
s) #search for contact (use grep)
search=true
sreg="$OPTARG";
;;
?)
exit;
;;
esac
done
shift $((OPTIND - 1));
if $search
then
$sreg $file
fi
exit
Здесь много проблем, которые http://shellcheck.net/ поймают. 'if $ search' - ужасная практика - это означает, что вы выполняете произвольную команду в этой строке. Лучше использовать 'search = 0' /' search = 1' и 'if ((search))'. Требуется много мест для большего количества котировок. И убедитесь, что вы знаете о том, как работает встроенная поддержка регулярных выражений bash, хотя grep звучит как здесь правильно (поскольку вы просматриваете большой многострочный файл). –
Кроме того, этот вопрос излишне усложняется из-за использования getopts. Почему бы просто не спросить об этом как однострочный с деталями, не связанными с вашей фактической проблемой? См. Также http://sscce.org/ и http://stackoverflow.com/help/mcve –
Спасибо! Я новичок в Linux, так что все еще выясняю синтаксис и тому подобное. Разорвал его через shellcheck и исправил эти проблемы. – Joe