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つのファイルを比較します。 options を使用すると、-rディレクトリを再帰的に比較します。

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

関連情報