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 に関する無料のオンライン ブックを参照してください。