Shell Script para verificar si cada argumento pasado es un archivo o directorio

Mientras automatizamos cosas en Linux, siempre trabajamos en el archivo y los directorios. Y a veces pasamos los archivos y directorios como argumentos a los scripts de shell. Y tenemos que determinar si el argumento proporcionado es un archivo o un directorio, y hoy vamos a ver cómo verificar si el argumento proporcionado es el archivo o el directorio. Antes de continuar, necesitamos saber algo sobre la comparación de archivos en el shell bash que podemos usar con la instrucción if. Aquí está la misma opción que se puede usar con la declaración if en bash shell-like

-d  file -  This option determines whether the provided 
file exists on the system and is it the directory.
-f  file -  This option determine the whether provided 
file is exist on the system and is it file.

Enfoque 1:

Algoritmo:

  1. Primero verifique que el argumento proporcionado sea el directorio o no use la declaración if usando la opción -d para el primer argumento usando el parámetro $1. Si es cierto, imprima el mensaje de que el argumento proporcionado es el directorio.
  2. Si el argumento no es el directorio, verifíquelo para el archivo. Use la opción -f y la declaración if para el primer argumento usando el parámetro $1. Si es cierto, la impresión del mensaje que proporcionó el argumento es el archivo.
  3. Si ambas condiciones son falsas, está claro que el argumento proporcionado no es ni archivo ni directorio. Luego imprima el mensaje, el argumento dado no es ni archivo ni directorio.

Guion:

#!/bin/sh
#Using -d option we are checking whether the first argument is a directory or not.
#$1 refers to the first argument
if [ -d $1 ]
then
        echo "The provided argument is the directory."
#Using -f option we are checking whether the first argument is a file or not.
elif [ -f $1 ]
then
        echo "The provided argument is the file."
#if the provided argument is not file and directory then it does not exist on the system.   
else
        echo "The given argument does not exist on the file system."
fi

Para Ejecutar el Script utilice los siguientes comandos:

./script_name.sh filename  # For files
./script_name.sh foldername # For folders

script to check argument passed is a directory or a file

Enfoque 2:

Ahora hagamos lo mismo para todos los argumentos provistos. Recorremos todos los argumentos usando el bucle for con la variable $@.$@ se refiere a todos los argumentos de la línea de comandos de un script de shell. Use el algoritmo anterior con el bucle for en el shell de la siguiente manera:

Algoritmo:

  1. Use for loop en Bash y recorra todos los argumentos pasados ​​usando el argumento $@.
  2. Dentro de la verificación de bucle, el argumento proporciona es el directorio o no usa la declaración if usando la opción -d para el primer argumento usando el parámetro $1. Si es cierto, imprima el mensaje de que el argumento proporcionado es el directorio.
  3. Si el argumento no es el directorio, verifíquelo para el archivo. Use la opción -f y la declaración if para el primer argumento usando el parámetro $1. Si es cierto, imprima un mensaje que proporcionó el argumento en el archivo.
  4. Si ambas condiciones son falsas, está claro que el argumento proporcionado no es ni archivo ni directorio. Luego imprima el mensaje, el argumento dado no es ni archivo ni directorio.

Guion:

#!/bin/sh

#traversing through all arguments using  for loop
for i in "$@"
do
        #Using -d option we are checking whether the first argument is a directory or not.
        if [ -d $i ]
        then
                echo "The provided argument $i is the directory."
                #Using -f option we are checking whether the first argument is a file or not.
        elif [ -f $i ]
        then
                echo "The provided argument $i is the file."
        #if the provided argument is not file and directory then it does not exist on the system. 
        else
                echo "The given argument does not exist on the file system."
        fi
done

Para Ejecutar el Script utilice los siguientes comandos:

./script.sh filename folder #for both files and folders

Publicación traducida automáticamente

Artículo escrito por nishant0073 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *