Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: motoqueiro10 em 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
-
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
-
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?
-
É 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:
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?
#!/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.