Como parte de este script, necesito poder verificar si el primer argumento dado coincide con la primera palabra del archivo. Si es así, salga con un mensaje de error; si no es así, agregue los argumentos al archivo. Entiendo cómo escribir el if
declaración, pero no cómo usar grep
dentro de un guión. Entiendo que grep
se verá algo como esto
grep ^$1 schemas.txt
Siento que esto debería ser mucho más fácil de lo que lo estoy haciendo.
Recibo un error "demasiados argumentos" en el if
declaración. Me deshice del espacio entre grep -q
y luego se esperaba un operador binario de error.
if [ grep -q ^$1 schemas.txt ]
then
echo "Schema already exists. Please try again"
exit 1
else
echo "[email protected]" >> schemas.txt
fi
Respuesta aceptada:
grep
devuelve un código de salida diferente si encontró algo (cero) frente a si no encontró nada (distinto de cero). En un if
declaración, un código de salida cero se asigna a "verdadero" y un código de salida distinto de cero se asigna a falso. Además, grep tiene un -q
argumento para no generar el texto coincidente (pero solo devolver el código de estado de salida)
Entonces, puedes usar grep así:
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
Como nota rápida, cuando hace algo como if [ -z "$var" ]…
, resulta que [
es en realidad un comando que está ejecutando, como grep. En mi sistema, es /usr/bin/[
. (Bueno, técnicamente, su shell probablemente lo tenga incorporado, pero eso es una optimización. Se comporta como si fuera un comando). Funciona de la misma manera, [
devuelve un código de salida cero para verdadero, un código de salida distinto de cero para falso. (test
es lo mismo que [
, excepto por el ]
de cierre )