Tengo el siguiente ifbloque 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 ifbloque aunque $PACKAGENAMEsea igual a kakadu-v6_4-00902C. ¿Qué estoy haciendo mal?
                    
                        bash
                                shell-script
                                test
                                
                    
                    
                        DemiSheep
fuente
                
                fuente

-eqes 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:
-eqes 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
polymecharé 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
-eqpor==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-zcadena 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