检查 bash 脚本是否有两个参数,即目录

检查 bash 脚本是否有两个参数,即目录

我正在编写一个比较两个目录的 bash 脚本,但我不确定如何检查条件

例如,如果用户输入 1 arg 而不是 2(我们需要 2,因为我们正在比较两个目录),则应该给出错误。如果两个 arg 都有效,则比较目录并输出到文件。

答案1

处理参数

处理通过脚本命令行传递的参数非常简单,如下所示。假设我们有这个脚本:

$ cat cmd.bash 
#!/bin/bash

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

现在不带参数运行:

$ ./cmd.bash 
arg1: 
arg2: 

有 1 个参数:

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

有 2 个参数:

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

检查参数

然后,您可以检查参数 1 和 2 是否是有效目录,然后根据需要退出或继续。因此,我们引入 2 个检查来查看 2 个参数是否是目录,如果不是则退出。

$ cat cmd.bash
#!/bin/bash

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

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

例子

假设我们有这些目录。

$ 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

如果给我们的不是 2 个目录,脚本就会直接退出。

$ ./cmd.bash hi bye

如果我们有 2 个目录:

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

如果我们给出两个以上的参数:

$ ./cmd.bash d1 d2 d3

我将把这两个目录的比较留给你。为了学习 Bash,我会引导您访问下面的链接,获取有关 Bash 的免费在线书籍。

参考

答案2

参数的数量在范围$#

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

如果您想强制参数都是目录(而不是其他类型的文件),请使用-d

实用性diff比较两个文件。使用选项-r,它会递归比较目录。

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

相关内容