Estoy aprendiendo bash.
Me gustaría hacer un script simple que, cuando no se dan argumentos, muestra algún mensaje. Y cuando doy números como argumento, s dependiendo del valor, hace una cosa u otra.
También me gustaría conocer sugerencias de los mejores manuales en línea para principiantes en bash
Gracias
> /dev/null
y / o2> /dev/null
después de eso enviar su salida estándar y / o flujos de error estándar al olvido.exit 1
). Existen otras convenciones sobre códigos de retorno / salida, que puede encontrar en línea rápidamente, pero el punto importante es que no debe ser 0, lo que indica éxito.Si solo está interesado en rescatar si falta un argumento en particular, la sustitución de parámetros es excelente:
fuente
Ejemplo
Resultado
Detalles
-z es el operador unario para la longitud de la cadena es cero.
$*
son todos los argumentos. Las comillas son por seguridad y encapsulan múltiples argumentos si están presentes.Utilice
man bash
y busque ( tecla / ) "unario" para más operadores como este.fuente
-z
como mizzingViejo, pero tengo motivos para volver a trabajar la respuesta ahora gracias a una confusión previa:
Esto hará eco de "Algo" si no hay un argumento posicional $ 1. Sin embargo, no valida que $ 1 contenga información específica.
fuente
$#
es explícitamente el recuento entero del número de argumentos; será "0", y repetirá "algo" aunque no haya argumentos, o será un número positivo, y repetirá "algo" correctamente. Pero la verificación en sí nunca hará nada, independientemente de la entrada o la falta de entrada que use; siempre informará que$#
contiene un valor. Entonces esto es completamente incorrecto y nunca funcionará como se afirma.echo $#
como el contenido de un script /tmp/test.sh, luego ejecútelo en / bin / bash así como en / bin / sh (o / bin / dash y cualquier otra implementación de shell que tenga disponible./tmp/test.sh
Repetirá "0" para la consola, como lo hará/bin/dash /tmp/test.sh
. Por otro lado,/tmp/test.sh foo
hará eco de "1", y/tmp/test.sh first second
hará eco de "2".man bash
, en la sección "Parámetros especiales", "El shell trata varios parámetros de manera especial. Estos parámetros solo pueden ser referenciados; no se permite su asignación", y "# Se expande al número de parámetros posicionales en decimal". También es un mandato de POSIX como se describe en pubs.opengroup.org/onlinepubs/9699919799/utilities/…