In this article, we’ll learn to write a Shell Script that checks if every argument supplied is a file or directory.
Shell script that receives any number of file names as arguments, checks if every argument supplied is a file or directory, and reports accordingly. If the argument is a file, it reports the number of lines present in it using the wc -l command
#!/bin/bash
# Loop through all arguments
for arg in "$@"
do
# Check if the argument is a file
if [ -f "$arg" ]
then
echo "$arg is a file and has $(wc -l < "$arg") lines"
# Check if the argument is a directory
elif [ -d "$arg" ]
then
echo "$arg is a directory"
# If the argument is neither a file nor a directory, report an error
else
echo "$arg is not a file or directory"
fi
done
Save the above script to a file (e.g., report-files.sh), make it executable using the chmod +x report-files.sh command, and then run it with the file names you want to check as arguments. For example, if you want to check the files file1.txt, file2.txt, and the directory mydir, you can run the script as follows
./report-files.sh file1.txt file2.txt mydirThe script will output something like this
file1.txt is a file and has 10 lines
file2.txt is a file and has 20 lines
mydir is a directory