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_SID
2>$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 ...