uso de if else in linux para descobrir se a pasta existe ou não

0

Eu tenho o seguinte script:

if [ -d "/$home/DB_handouts"] then
 echo "Directory DB_handouts found"
else
mkdir /$home/DB_handouts
 chmod 777 /$home/DB_handouts
fi

A execução do código acima produz um erro:

./file.sh: line 12: syntax error near unexpected token 'else'
./file.sh: line 12: '   else'

Como posso corrigir isso?

    
por Ann 30.03.2016 / 08:43

2 respostas

3

Existem vários problemas com o seu script:

  • deve haver um ; entre o ] e o then (como o @heemayl também indicado) ou o then deve ser colocado em uma linha própria
  • tem de haver um espaço entre handouts" e ]
  • você deve (mas isso não gera um erro) recuar consistentemente ou usar a opção -m para mkdir (como @skwlisp indicado)

algo como:

if [ -d "/$home/DB_handouts" ] 
then
  echo "Directory DB_handouts found"
else
  mkdir -m 777 /$home/DB_handouts
fi

O acima, é claro, assume que /$home existe, a coisa toda pode ser muito mais facilmente obtida usando:

mkdir -p -m 777 /$home/DB_handouts

Com -p não haverá reclamações se o diretório já existir.

    
por 30.03.2016 / 09:49
4

Você precisa adicionar um ponto-e-vírgula ( ; ) entre if [ -d "/$home/DB_handouts"] e then (ou colocar then em uma nova linha):

if [ -d "/$home/DB_handouts" ]; then

Além disso, no seu caso, verifique se mkdir -p faria o trabalho. Olhando para o exemplo, penso que o seguinte deve funcionar:

mkdir -p /foo/bar
chmod 777 /foo/bar
    
por 30.03.2016 / 08:49