Comparar variables en script

Comparar variables en script

Tengo esta declaración if [ ! - f "$i" -o "$i"x = "$MTR"x]y me preguntaba qué logra esta declaración. Entiendo que la primera parte verifica si la variable ino es un archivo, pero no puedo entender cuál es la segunda parte después de -o(que significa OR lógico, creo). Cualquier ayuda será de gran ayuda.

Respuesta1

Correcto, el -o representa un OR lógico.
Compara "$i"x = "$MTR"xel contenido de las variables $iy $MTR.
Creo que xse agrega a ambas variables para evitar problemas si alguna de las dos variables no está configurada o no está inicializada.

Respuesta2

Suponiendo que la declaración es

if [ ! -f "$i" -o "$i"x = "$MTR"x ]

Comprueba -f "$i"si el valor $icorresponde a un archivo normal (o un enlace simbólico a un archivo normal). Luego esta prueba se niega con !. Es -ouna forma anticuada y obsoleta de decir "OR lógico".

Las "$i"x = "$MTR"xpruebas, de una manera un tanto incómoda que puede haber sido necesaria en implementaciones realmente antiguas del shshell, indican si $iy $MTRes la misma cadena.

En un shell estándar (actual) sh, la declaración se escribiría

if [ ! -f "$i" ] || [ "$i" = "$MTR" ]

o, con un poco de lógica aplicada,

if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]

En palabras: la afirmación es verdadera si $ies la misma cadena $MTRy se refiere a un archivo normal existente (o un enlace simbólico a uno), o si $ino es el nombre de un archivo.

Puede ser más interesante observar lo que significa que esta declaración seaFALSO. Sólo es falso si $iy $MTRno es la misma cadenay $ihace referencia a un archivo existente.

información relacionada