处理通过脚本命令行传递的参数非常简单,如下所示。假设我们有这个脚本:
$ cat cmd.bash
#!/bin/bash
echo "arg1: $1"
echo "arg2: $2"
Run Code Online (Sandbox Code Playgroud)
现在不带参数运行:
$ ./cmd.bash
arg1:
arg2:
Run Code Online (Sandbox Code Playgroud)
有 1 个参数:
$ ./cmd.bash hi
arg1: hi
arg2:
Run Code Online (Sandbox Code Playgroud)
有 2 个参数:
$ ./cmd.bash hi bye
arg1: hi
arg2: bye
Run Code Online (Sandbox Code Playgroud)
然后,您可以检查参数 1 和 2 是否为有效目录,然后根据需要退出或继续。所以我们引入了 2 个检查来查看 2 个参数是否是目录,如果不是则退出。
$ cat cmd.bash
#!/bin/bash
[ -d "$1" ] || exit
[ -d "$2" ] || exit
[ $# == 2 ] || exit
echo "arg1: $1"
echo "arg2: $2"
Run Code Online (Sandbox Code Playgroud)
假设我们有这些目录。
$ 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
Run Code Online (Sandbox Code Playgroud)
如果我们得到了 2 个目录以外的任何东西,脚本将简单地退出。
$ ./cmd.bash hi bye
Run Code Online (Sandbox Code Playgroud)
如果我们有 2 个目录:
$ ./cmd.bash d1 d2
arg1: d1
arg2: d2
Run Code Online (Sandbox Code Playgroud)
如果我们得到超过 2 个参数:
$ ./cmd.bash d1 d2 d3
Run Code Online (Sandbox Code Playgroud)
我会把这两个目录的比较留给你。要学习 Bash,我会引导您访问以下链接,获取有关 Bash 的免费在线书籍。
参数的数量在参数中$#
。
if [ $# -ne 2 ]; then
echo 1>&2 "Usage: $0 DIRECTORY1 DIRECTORY2"
exit 3
fi
Run Code Online (Sandbox Code Playgroud)
如果您想强制参数都是目录(而不是其他类型的文件),请使用-d
.
该实用程序diff
比较两个文件。使用选项-r
,它递归地比较目录。
diff -ru -- "$1" "$2"
Run Code Online (Sandbox Code Playgroud)