preciso saber se é arquivo ou diretorio

Iniciado por motoqueiro10, 23 de Setembro de 2009, 09:31

tópico anterior - próximo tópico

motoqueiro10

estou aprendendo VI e fiz esse script mas não tah certo o que tem de errado?
Alguém pode corrigir para mim, estou aprendendo linux por apostilas sozinho.
esse é um exercicio que não consigo fazer porque não tenho explicações.

#!/bin/bash
     
       arquivo='find * -type f'
     
       while read -p "Digite o nome do arquivo ou diretório: " digite; do
             if [ $digite == arquivo ]; then
                  echo "Esse é um arquivo: $digite"
                  BREAK
             else
                 echo "Esse é um Diretório"
            fi
      done

musinet

Pelo que eu pude entender desse scroipt, ele começa dando um find em sua pasta e armazenando todos os arquivos na variável $arquivo. Como o parâmetro é type -f, ele não armazenará nomes de pastas.

Em seguida ele começa um laço onde solicita o nome de um arquivo ou diretório, armazenando o resultado na variável $digite. Em seguida verifica se o conteúdo de $digite coincide com algum dos nomes gravados em $arquivo. Se coincidir, ele avisa que é um arquivo e interrompe o processamento. Se não, avisa que é um diretório e retorna o laço.

Abs.
Cassiano

motoqueiro10

o problema agora é que ele diz que tudo é diretório, mesmo eu digitando um arquivo ele diz que é um diretório o que deve ser mudado?

clcampos

#3
É evidente que ele vai dizer que tudo é um diretório!

Você não esta usando o conteúdo da variável arquivo pois você não a usa com o $. A princípio seu if deveria ficar assim para referenciar o conteúdo da variável arquivo:

Citarif [$digite == $arquivo ];then

Porém não se esqueça que dentro de $arquivo provavelmente não existe um termo e sim uma lista de termos, assim para que sua rotina funcione como você quer deveria mudá-la, talvez assim (não testei nada, digitei direto da sua rotina aqui no fórum):

Citação de: motoqueiro10 online 23 de Setembro de 2009, 09:31
#!/bin/bash
     
      arquivo='find * -type f'

      read -p "Digite o nome do arquivo ou diretório: " digite
     
      for item in $arquivo; do
            if [ "$digite" = "$item" ]; then
                 echo "Esse é um arquivo: $digite"
                 BREAK
            else
                echo "Esse é um Diretório"
           fi
     done

Porém para que tanto trabalho? Por não testa direto se o nome digitado é um diretório, ou não?

Citar
#!/bin/bash

read -p "Digite o nome do arquivo ou diretório: " digite

test -d "$digite"  && echo "Esse é um Diretório" || echo "Esse é um arquivo: $digite"

Claro que a rotina esta rudimentar e sem consistências, mas acho que dá para dar uma ideia.
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!