scripts script que programas manejo lineas leer fichero extraer ejercicios ejemplos cadenas bash

bash - que - shell script leer fichero y extraer lineas



¿Cómo uso una comparación grep de archivos dentro de una instrucción bash if/else? (5)

Desde grep --help , pero también vea man grep :

El estado de salida es 0 si se seleccionó alguna línea, 1 en caso contrario; si ocurre algún error y no se dio -q, el estado de salida es 2.

if grep --quiet MYSQL_ROLE=master /etc/aws/hosts.conf; then echo exists else echo not found fi

Es posible que desee utilizar una expresión regular más específica, como ^MYSQL_ROLE=master$ , para evitar esa cadena en los comentarios, los nombres que simplemente comienzan con "master", etc.

Esto funciona porque el if toma un comando y lo ejecuta, y usa el valor de retorno de ese comando para decidir cómo proceder, con cero significa verdadero y no cero significa falso, al igual que otros códigos de retorno interpretados por el shell, y lo contrario de un lenguaje como C.

Cuando aparezca nuestro servidor, debemos verificar un archivo para ver cómo está configurado el servidor.

Queremos buscar la siguiente cadena dentro de nuestro archivo /etc/aws/hosts.conf:

MYSQL_ROLE=master

Entonces, queremos probar si esa cadena existe y usar una instrucción if / else para ejecutar una de dos opciones dependiendo de si la cadena existe o no.

¿Cuál es la sintaxis de BASH para la declaración if?

if [ ????? ]; then #do one thing else #do another thing fi


Tenga en cuenta que, para PIPE es cualquier comando o secuencia de comandos, entonces:

if PIPE ; then # do one thing if PIPE returned with zero status ($?=0) else # do another thing if PIPE returned with non-zero status ($?!=0), e.g. error fi

Para el registro, [ expr ] es un shell incorporado taquigrafía para test expr .

Como grep regresa con el estado 0 en caso de una coincidencia, y el estado distinto de cero en caso de que no haya coincidencias, puede usar:

if grep -lq ''^MYSQL_ROLE=master'' ; then # do one thing else # do another thing fi

Tenga en cuenta el uso de -l que solo le importa que el archivo tenga al menos una coincidencia (de modo que grep regrese tan pronto como encuentre una coincidencia, sin continuar analizando innecesariamente el archivo de entrada).

en algunas plataformas [ expr ] no es un built-in, sino un ejecutable real /bin/[ (cuyo último argumento será ] ), por lo que [ expr ] debe contener espacios en blanco entre los corchetes, y por qué debe ser seguido por uno de los separadores de lista de comandos ( ; , && , || , | , & , newline)


Tratar:

if [ -n "`grep /"MYSQL_ROLE=master/" /etc/aws/hosts.conf`" ]; then


solo usa bash

while read -r line do case "$line" in *MYSQL_ROLE=master*) echo "do your stuff";; *) echo "doesn''t exist";; esac done <"/etc/aws/hosts.conf"


if toma un comando y verifica su valor de retorno. [ es solo un comando.

if grep -q ... then .... else .... fi