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

Modified on: Sat, 30 Jun 2018 11:57:00 +0800

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

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

作者:Gilles,asura

最佳答案

处理参数

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

$ cat cmd.bash 
#!/bin/bash

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

现在没有参数运行:

$ ./cmd.bash 
arg1: 
arg2: 

有一个参数:

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

如果我们给出了超过2个参数:

$ ./cmd.bash d1 d2 d3

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

参考

作者:,slm

相关问答

添加新评论