Autor Tópico: preciso saber se é arquivo ou diretorio  (Lida 4963 vezes)

Offline motoqueiro10

  • Usuário Ubuntu
  • *
  • Mensagens: 2
    • Ver perfil
preciso saber se é arquivo ou diretorio
« Online: 23 de Setembro de 2009, 09:31 »
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

Offline musinet

  • Usuário Ubuntu
  • *
  • Mensagens: 279
    • Ver perfil
Re: preciso saber se é arquivo ou diretorio
« Resposta #1 Online: 23 de Setembro de 2009, 09:46 »
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

Offline motoqueiro10

  • Usuário Ubuntu
  • *
  • Mensagens: 2
    • Ver perfil
Re: preciso saber se é arquivo ou diretorio
« Resposta #2 Online: 24 de Setembro de 2009, 07:37 »
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?

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: preciso saber se é arquivo ou diretorio
« Resposta #3 Online: 24 de Setembro de 2009, 08:39 »
É 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:

Citar
if [$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):

#!/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.
« Última modificação: 24 de Setembro de 2009, 08:42 por clcampos »
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!