我正在编写一个比较两个目录的 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 的免费在线书籍。