Compruebe que un script bash tenga exactamente dos argumentos que sean directorios

Compruebe que un script bash tenga exactamente dos argumentos que sean directorios

Estoy escribiendo un script bash que compara dos directorios, pero no estoy seguro de cómo verificar las condiciones.

Por ejemplo, si el usuario ingresa 1 arg en lugar de 2 (necesitamos 2 ya que estamos comparando dos directorios), debería dar un error. Si ambos argumentos son válidos, compare los directorios y la salida a un archivo.

Respuesta1

Procesamiento de argumentos

Procesar argumentos que se pasan a través de la línea de comando de un script es tan simple como se muestra a continuación. Digamos que teníamos este script:

$ cat cmd.bash 
#!/bin/bash

echo "arg1: $1"
echo "arg2: $2"

Ahora ejecuta sin argumentos:

$ ./cmd.bash 
arg1: 
arg2: 

Con 1 argumento:

$ ./cmd.bash hi
arg1: hi
arg2: 

Con 2 argumentos:

$ ./cmd.bash hi bye
arg1: hi
arg2: bye

Comprobando los argumentos

Luego puede verificar si los argumentos 1 y 2 son directorios válidos o no, y luego salir o continuar según sea necesario. Entonces introducimos 2 comprobaciones para ver si los 2 argumentos son directorios o no; si no, salimos.

$ cat cmd.bash
#!/bin/bash

[ -d "$1" ] || exit
[ -d "$2" ] || exit
[ $# == 2 ] || exit

echo "arg1: $1"
echo "arg2: $2"

Ejemplo

Digamos que tenemos estos directorios.

$ mkdir d1 d2

$ ls -l
total 12
-rwxrwxr-x. 1 saml saml   89 Oct 14 23:13 cmd.bash
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d1
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d2

Si se nos proporciona algo más que 2 directorios, el script simplemente se cerrará.

$ ./cmd.bash hi bye

Si nos dan 2 directorios:

$ ./cmd.bash d1 d2
arg1: d1
arg2: d2

Si nos dan más de 2 argumentos:

$ ./cmd.bash d1 d2 d3

Te dejo la comparación de los 2 directorios. Para aprender Bash, lo dirigiría al siguiente enlace para obtener un libro en línea gratuito sobre Bash.

Referencias

Respuesta2

El número de argumentos está en elparámetro$#.

if [ $# -ne 2 ]; then
  echo 1>&2 "Usage: $0 DIRECTORY1 DIRECTORY2"
  exit 3
fi

Si desea imponer que los argumentos sean ambos directorios (a diferencia de otros tipos de archivos), pruébelos con-d.

La utilidaddiffcompara dos archivos. Con la opción -rcompara directorios de forma recursiva.

diff -ru -- "$1" "$2"

información relacionada