Faça assim if [ -d 1 ] && [ -d 8 ] && [ -d 4 ]
Eu quero verificar o diretório 1 8 e 4 presente dentro de uma lista de diretório pai que é passado como argumento para o script. PFB meu script
#!/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"
Estou recebendo o erro abaixo quando uso se [[-d 1] & & [-d 8] & & [-d 4]];
./fs.sh: line 8: [: -d: binary operator expected
se usarmos [[-d 1]]; em vez de se [[-d 1] & & [-d 8] & & [-d4]]; meu código está funcionando bem, mas minha exigência é verificar se todos os arquivos mencionados acima (1 4 8) estão presentes no diretório pai ou não.
Tente isso,
if [[ -d 1 && -d 8 && -d 4 ]];
Seu problema subjacente aqui é que você assume que [
é exatamente o mesmo tipo de parênteses e que você pode aninhá-los. Isso não é verdade. A expressão [ ... ]
é igual a test ...
.
O utilitário test
tem a possibilidade de combinar vários testes com -a
para and
e com -o
para or
. Veja o manual para detalhes.
Assim, você pode escrever seu cheque como test -d 1 -a d 4 -a -d 8
ou [ -d 1 -a d 4 -a -d 8 ]
Tags shell-script