📌  相关文章
📜  用于检查每个传递的参数是文件还是目录的 Shell 脚本

📅  最后修改于: 2022-05-13 01:57:29.769000             🧑  作者: Mango

用于检查每个传递的参数是文件还是目录的 Shell 脚本

在 Linux 中实现自动化时,我们总是在文件和目录上工作。有时我们将文件和目录作为参数传递给 shell 脚本。而且我们要判断provided参数是文件还是目录,今天我们来看看如何判断provider参数是文件还是目录。在继续之前,我们需要了解一些关于 bash shell 中的文件比较的信息,我们可以将其与 if 语句一起使用。这是可以与 bash shell 中的 if 语句一起使用的相同选项

-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.

方法一:

算法:

  1. 首先使用 $1 参数的第一个参数的 -d 选项使用 if 语句检查提供的参数是否是目录。如果为真,则打印提供的参数是目录的消息。
  2. 如果参数不是目录,则检查它的文件。对使用 $1 参数的第一个参数使用 -f 选项和 if 语句。如果为真,则打印提供参数的消息是文件。
  3. 如果两个条件都为假,那么很明显提供的参数既不是文件也不是目录。然后打印给定参数既不是文件也不是目录的消息。

脚本:

#!/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

要执行脚本,请使用以下命令:

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

检查传递的参数的脚本是目录还是文件

方法二:

现在让我们对所有提供的参数做同样的事情。我们使用带有 $@ 变量的 for 循环遍历所有参数。$@ 指的是 shell 脚本的所有命令行参数。将上述算法与 shell 中的 for 循环一起使用,如下所示:

算法:

  1. 在 Bash 中使用 for 循环并使用 $@ 参数遍历所有传递的参数。
  2. 在 for 循环检查中,提供的参数是目录或不使用 if 语句,使用 -d 选项作为第一个参数,使用 $1 参数。如果为真,则打印提供的参数是目录的消息。
  3. 如果参数不是目录,则检查它的文件。对使用 $1 参数的第一个参数使用 -f 选项和 if 语句。如果为真,则打印一条在文件中提供参数的消息。
  4. 如果两个条件都为假,那么很明显提供的参数既不是文件也不是目录。然后打印给定参数既不是文件也不是目录的消息。

脚本:

#!/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

要执行脚本,请使用以下命令:

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