grepstr()
{
grep "$1 $2" $TMP/"ORACLE_SID"_dbmode.txt > /dev/null 2>$1
}
- В чем смысл вышеуказанной команды?
- Что такое
$1и$2? Зачем это надо? - Есть ли альтернативы для использования
$1и$2?
Это именно то, на что похож код?
На самом деле это функция, которая принимает два аргумента, скажем, они arg1 и arg2 .
Затем он читает файл с именем ORACLE_SID_dbmode.txt и печатает каждую строку, содержащую arg1 arg2 (объединенную с пробелом между ними), и сохраняет сообщения об ошибках в файле с именем arg1 .
Это довольно запутанно, поэтому я не думаю, что это настоящий код.
Я полагаю, это на самом деле это:
grepstr()
{
grep "$1" "$2" $TMP/"$ORACLE_SID"_dbmode.txt >/dev/null 2>&1
}
Изменения:
"$1 $2" становится "$1" "$2"ORACLE_SID становится $ORACLE_SID2>$1 становится 2>&1Если это так, его можно использовать двумя способами:
grepstr options string_or_pattern
например:
grepstr -i something
бы сделать его распечатать (см ниже) любые строки в файле "$ORACLE_SID"_dbmode.txt , которые включают в строковое something - то, Something - то, SOMETHING - то и т.д.
-i означает без учета регистра и является лишь примером; любой вариант может быть использован.
(Кроме того, технически something не является строкой, но шаблон, например [0-9] будет соответствовать любой цифре).
Второй способ:
grepstr string_or_pattern filename
в этом случае он напечатает любые строки, соответствующие string_or_pattern в filename или "$ORACLE_SID"_dbmode.txt .
Это кажется менее вероятным, но возможно, в зависимости от того, как используется код.
Это также можно назвать так:
grepstr option1 option2
но это будет считывать из стандартного ввода (например, с клавиатуры по умолчанию) и печатать любые строки, содержащие "$ORACLE_SID"_dbmode.txt , что почти наверняка не то, что предполагалось, учитывая, что "$ORACLE_SID"_dbmode.txt выглядит как файл имя, а не строка или шаблон для сопоставления.
Если мое предположение верно, код не >/dev/null 2>$1 , а >/dev/null 2>&1 , что означает, что выходные данные и сообщения об ошибках не печатаются.
>/dev/null означает, что стандартный вывод grep (то есть совпадающие строки) отправляется в /dev/null , который является специальным файлом, который операционная система просто игнорирует.
2>&1 после >/dev/null означает, что сообщения об ошибках также отправляются туда.
Поэтому, если вывод не важен, возможно, grepstr вызывается так:
if grepstr...
или вот так:
grepstr...
if [ $? -ne 0 ]
выполнить только некоторый код, если было совпадение.
В ответ на другую часть вашего вопроса, да, это может быть изменено на
grepstr()
{
grep "$@" $TMP/"$ORACLE_SID"_dbmode.txt > /dev/null 2>&1
}
"$@" Расширяется до "$1" "$2" "$3"... (т. Е. Столько аргументов, сколько предусмотрено).
Я думаю, что так будет лучше, потому что он будет более гибким.
С другой стороны, если это требует двух аргументов по какой-то причине, о которой я не могу думать, то, возможно, "$1" "$2" - это то, что задумал автор.
$1 и $2 являются параметрами. Ваш фрагмент определяет функцию grepstr .
Например, бег
grepstr first second
на самом деле запускает команду
grep "first second" $TMP/"ORACLE_SID"_dbmode.txt
и перенаправляет вывод в /dev/null (который является приемником сообщений, все помещенное туда просто исчезает).
По сути, когда вы запускаете скрипт (или функцию), $1 , $2 , $3 (и т.д.) - это заданные вами параметры. Вы можете проверить, установлен ли параметр с помощью -z , например, if [ -z $3 ]; then ...