スクリプトに引数として渡された親ディレクトリのリストにディレクトリ1 8と4があることを確認したいと思います。 PFB私のスクリプト
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
cd $line
echo "checking in $line" >> ../filesearch.log
if [ [ -d 1] && [ -d 8] && [ -d 4] ]; then
echo "1 8 4 exists" >> ../filesearch.log
else
echo "Dir 1 8 4 does not exist" >> ../filesearch.log
fi
cd ../
done < "$1"
if [ [ -d 1] && [ -d 8] && [ -d 4] ];を使用すると、次のエラーが発生します。
./fs.sh: line 8: [: -d: binary operator expected
if [ [ -d 1] && [ -d 8] && [ -d 4] ];代わりに[[ -d 1 ]];を使用すると、私のコードは正常に動作しますが、私の要件は、ファイルがあることを確認することです。親ディレクトリには上記のすべてのファイル(1 4 8)があります。
答え1
ここでの基本的な問題は、これが同じタイプの角括弧であると仮定して[
入れ子にできることです。それは本当ではありません。[ ... ]
と同じ表現ですtest ...
。
このtest
ユーティリティは-a
forand
とforと複数のテストを-o
組み合わせることができますor
。詳しくはマニュアルをご覧ください。
test -d 1 -a d 4 -a -d 8
したがって、小切手は次のように書くことができます。[ -d 1 -a d 4 -a -d 8 ]
答え2
このようにif [ -d 1 ] && [ -d 8 ] && [ -d 4 ]
編集:無視してください。以下の答えは正しいです。
答え3
この試み、
if [[ -d 1 && -d 8 && -d 4 ]];