Tengo el siguiente if
bloque en mi script bash:
if [ ${PACKAGENAME} -eq kakadu-v6_4-00902C ]; then
echo "successfully entered if block!!"
fi
La ejecución del script no está ingresando a mi if
bloque aunque $PACKAGENAME
sea igual a kakadu-v6_4-00902C
. ¿Qué estoy haciendo mal?
bash
shell-script
test
DemiSheep
fuente
fuente
-eq
es cierto para los enteros, desea probar una cadena o expresión regular (==
o=~
): mywiki.wooledge.org/BashGuide/TestsAndConditionalsjasonwryan
¡Echaré un vistazo a este recurso!Respuestas:
-eq
es un operador aritmético, que compara dos números.Uso
=
(portátil / estándarsh
),=~
o en su==
lugar.También use comillas, porque si
${PACKAGENAME}
contiene un espacio en blanco o un carácter comodín, se dividirá en varios argumentos, lo que hace que[
vea más argumentos de los deseados. Vea aquí una lista de problemas comunes de bash.Ver
man bash
, buscar ( /) paraCONDITIONAL EXPRESSIONS
.fuente
polym
echaré un vistazo, gracias por el recurso! Abriré esa pestaña junto a mi guía de VI. :)[[ $PACKAGENAME == "kakadu..." ]]
está bien.=
,==
y!=
, porque ese lado es un patrón, no una cadena. Por ejemplo,foo='*'; [[ whatever = $foo ]]
es cierto.Reemplace
-eq
por==
lo que su bloque if sería este: -fuente
Otra forma es negarlos:
Las primeras pruebas de bloque anterior si
"$PACKAGENAME"
tiene algún valor, y, si no se sale con error y ecos?'this'}
astderr
. Si su shell padre todavía existe, la prueba ha pasado, y luego prueba si eliminar la cadena 'kakadu ...' de la variable da como resultado una-z
cadena vacía. Si no lo hace, vuelve a emitir un error y sale del shell. Si su shell aún existe en este punto, cualquier cosa después de que se ejecute el bloque, de lo contrario no lo es.Probablemente este tipo de cosas se implemente mejor en una función. Me gusta:
Con esa función, puede proporcionar tantos argumentos como lo permita su sistema. Si proporciona menos de 2, devolverá 1 y emitirá un mensaje a
stderr
. Si proporciona 2 o más argumentos, tratará a todos como cadenas y devolverá 0 si todos son idénticos y no son nulos; de lo contrario, devolverá el número de argumento que primero falla la comprobación.En su caso se puede usar como:
Para demostrar más, escribiré otra función:
MANIFESTACIÓN:
SALIDA:
fuente