bashスクリプトにディレクトリである引数が2つあることを確認します。

bashスクリプトにディレクトリである引数が2つあることを確認します。

2つのディレクトリを比較するbashスクリプトを書いていますが、条件をチェックする方法がわかりません

たとえば、ユーザーが 2 つの引数ではなく 1 つの引数を入力した場合 (2 つのディレクトリを比較するため 2 つ必要)、エラーが発生します。両方の引数が有効な場合は、ディレクトリを比較してファイルに出力します。

答え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

2 つ以上の引数が与えられた場合:

$ ./cmd.bash d1 d2 d3

2 つのディレクトリの比較はあなたにお任せします。Bash を学習するには、以下のリンクにある Bash に関する無料のオンライン ブックを参照してください。

参考文献

答え2

引数の数はパラメータ$#

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

引数が両方ともディレクトリ(他の種類のファイルではなく)であることを強制したい場合は、次のようにテストします。-d

ユーティリティdiff2 つのファイルを比較します。オプションを使用すると-r、ディレクトリを再帰的に比較します。

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

関連情報