스크립트에 인수로 전달된 상위 디렉터리 목록에 디렉터리 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
for and
및 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 ]];