Ajuda

1. Ajuda

Aurelio Marques Brasil
aureliobrasil198

(usa Ubuntu)

Enviado em 03/06/2015 - 15:29h

Ai galera, estou tentando resolver um script mas não tô conseguindo, pois estou iniciando.
Gostaria que vcs, se possível ajudasse.

tenho que criar esse script usando funções:
1. Criar diretórios (Script que cria os diretórios “Pasta_Aluno” e “Backup_Aluno” caso não
existam. Caso existam as duas pastas, informar que os diretórios existem )
2. Criar arquivos ( Script que cria uma quantidade “X” de diretórios e arquivos dentro de
“Pasta_Aluno”. Solicite a quantidade desejada de arquivos e diretórios a ser criado)
3. Backup de dados ( Script que verifica uma lista de dados dentro da pasta “Pasta_Aluno” e faz
um cópia desses dados com extensão (.bkp) e depois move para dentro da pasta
“Backup_Aluno”.
4. Listar arquivos de backup ( Script que lista o conteúdo da pasta “Backup_Aluno” )
5. Exit ( Sair da função “Menu” )

Desde já agradeço.




  


2. Re: Ajuda

thinomar
thinomar

(usa Linux Mint)

Enviado em 03/06/2015 - 15:34h

Eae, cara. Tudo na boa?
Então, fica mais fácil conseguir ajuda se você mandar o que já fez e especificar o que, exatamente, você está com dificuldades para fazer. Fica mais fácil, para nós do VOL, ajudarmos. Além do mais, caso alguém se disponha a te entregar o script pronto, isso não iria acrescentar tanto ao seu conhecimento quanto em tentar, de inicio, fazer sozinho.

Mas já falando do seu script. Vi que ele terá várias funções, então, recomendo que faça as funções que conseguir e mande as que não consegue. Para chamar a função de cada opção, basta usar case.
--
sudo make me a sandwich


3. Re: Ajuda

Aurelio Marques Brasil
aureliobrasil198

(usa Ubuntu)

Enviado em 03/06/2015 - 15:40h

thinomar escreveu:

Eae, cara. Tudo na boa?
Então, fica mais fácil conseguir ajuda se você mandar o que já fez e especificar o que, exatamente, você está com dificuldades para fazer. Fica mais fácil, para nós do VOL, ajudarmos. Além do mais, caso alguém se disponha a te entregar o script pronto, isso não iria acrescentar tanto ao seu conhecimento quanto em tentar, de inicio, fazer sozinho.

Mas já falando do seu script. Vi que ele terá várias funções, então, recomendo que faça as funções que conseguir e mande as que não consegue. Para chamar a função de cada opção, basta usar case.
--
sudo make me a sandwich



O pior cara é que eu não tenho noção nenhuma, pois o professor me deu essa tarefa e mandou somente os slides, a disciplina é em EAD, entende.



4. Re: Ajuda

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/06/2015 - 17:31h

Alguns conteúdos para você estudar shell script e começar o seu programa:

http://aurelio.net/shell/apostila-introducao-shell.pdf
https://www.telecom.uff.br/pet/petws/downloads/apostilas/LINUX.pdf
http://www.vivaolinux.com.br/dica/Apostila-de-Shell-Script-para-iniciantes
http://aurelio.net/shell/canivete/

Tente começar a fazer, pode ser que você tenha um pouco de dificuldade, porém durante esse processo você irá aprender. Poste o que você fez, mesmo que seja pouco. Erre, acerte, tente de novo.
____________________________________________
Viver é etecétera - Guimarães Rosa


5. Re: Ajuda

thinomar
thinomar

(usa Linux Mint)

Enviado em 05/06/2015 - 16:09h

Eae aureliobrasil198, conseguiu fazer algo?
Como o amigo acima disse, é errando que você aprende. Então, tentar fazer te acrescentará mais do que pegar um pronto (muito mais).
Para dar uma força, vou listar detalhadamente o que fazer e apontar os comandos principais, coisa que já ajuda muito.
1. Criar diretórios
Listar diretorios e verificar se Pasta_Aluno e Backup_Aluno estão entre os itens listados
Se não estiverem, criar os diretorios.
Recomendo que verifique os dois separadamente, para o caso de haver apenas um criado.
Comandos chave: ls, grep, if/else, mkdir

2. Criar arquivos
Verificar se Pasta_Aluno existe.
Se existir, pedir a quantidade de arquivos e pastas a serem criados.
Uma boa ideia seria colocar um numero no final de cada arquivo e diretorio, usando um laço. Por exemplo: arq_aluno1, arq_aluno2, dir_aluno1, etc. Se seguir essa dica, terá que listar todos os arquivos e diretorios e verificar qual o ultimo numero de cada um, criando os novos na sequencia desse numero. Essa verificacao utilizará listagem e filtragem.
Comandos chave: ls, grep, read, if/else, for, touch, sed

3. Backup de dados
Verificar se Pasta_Aluno existe.
Se existir, verificar se Backup_Aluno existe.
Se Backup_Aluno não existir, criar.
Listar arquivos de Pasta_Aluno e verificar se ha algo.
Se houver, copiar para Backup_Aluno, incluindo .bkp no final.
Uma boa ideia seria incluir data e/ou hora do backup em cada arquivo, para o caso de ser necessario realizar o backup do mesmo arquivo futuramente.
Comandos chave: ls, grep, if/else, mkdir, cp, date

4. Listar arquivos de backup
Verificar se Backup_Aluno existe.
Se existir, listar conteudo.
Comandos chave: ls, grep, if/else

5. Exit
Simplesmente sair
Se quiser, limpar a tela
Comandos chave: exit, clear

Menu
Criar laço para manter menu sendo executado enquanto não se sair. Pode-se usar um loop infinito.
Verificar opcao digitada e executar a funcao correspondente
Comandos chave: while, echo, read, case, sleep

Uma dica é você ir montando as funções, de uma a uma, e, caso encontre alguma dificuldade e não consiga encontrar a solução, pergunte aqui, pois há sempre alguém online disposto a ajudar. :D
--
sudo make me a sandwich


6. Resolvido

Aurelio Marques Brasil
aureliobrasil198

(usa Ubuntu)

Enviado em 23/06/2015 - 16:54h

Ai galera, resolvi sim e estou aprendendo mais e mais, agora gostaria que vcs me respondessem se essas questões estão corretas.


1)Faça um script que crie três pastas e três arquivos e depois copia cada arquivo
criado para dentro das pastas criadas respectivamente ( USE WHILE ou UNTIL )
R-
#!/bin/bash
#Autor: AURELIO BRASIL
# Script criar pasta e arquivos
cd /
i=1
until [ $i -gt 4 ]

do
mkdir pasta$i
echo "Arquivo"$i > /pasta$i/arquivo$ia.txt
echo "Arquivo"$i > /pasta$i/arquivo$ib.txt
echo "Arquivo"$i > /pasta$i/arquivo$ic.txt

i=$(( i+1 ))
done

2)Faça um script que leia uma lista de nomes de uma pasta qualquer e verifique
se é um diretório ( imprima na tela o nome do diretório ) ou se é arquivo
( imprima na tela o nome do arquivo ). Após conclusão da leitura e verificação
da lista de nomes, mostre na tela “Foi concluído a busca pela lista de nomes” e
informe uma condição de parada para sair do laço. (Use WHILE ou UNTIL e
qualquer estrutura de controle que achar necessário)

R-
#!/bin/bash
#Autor: AURELIO BRASIL
# Script ler lista de nomes

i=1
until [ $i -gt 4]
for ARQUIVO in $(ls -d /pasta$i)
do
NOME_ARQUIVO = ${ARQUIVO##*/}
echo $NOME_ARQUIVO

done
done

3)Faça um script que leia dois números e verifique qual o maior e o menor
número informado. Se por acaso, os números informados forem iguais mostrar o
resultado "Os números são iguais" e informe uma condição de parada para sair
do laço. ( USE WHILE ou UNTIL )

R-
#!/bin/bash
#Autor: AURELIO BRASIL
# Script numero maior que o outro

while true
do
read -p "digite o primeiro numero:" n "
read -p "digite o segundo numero:" m "
read m
if [ $n -eq m ]
then
echo "O valor são iguais."
elif [ $n -gt $m ]
then
echo "O primeiro($n) valor é maior que o segundo($m)."
else
echo "O segundo($m) valor é maior que o primeiro($n)."
fi
done

4)Faça um script que crie um arquivo e dentro desse arquivo contenha uma lista
de nomes. E depois exiba essa lista de nomes na tela do terminal ( USE WHILE
ou UNTIL)

R-
#!/bin/bash
#Autor: AURELIO BRASIL
# Script exibe nome de uma lista

echo "Aurelio "
Amanda
Carol
Maria
Florisbela
Isaac
Joselia
Renan
Fagner
Auricelia
Aurelio
Marcia
Patricia
Marcos
Andreyne" > /listaDeNomes.txt

while read line
do
echo -e "Nome: $line"
done < /listaDeNomes.txt


7. Re: Ajuda

thinomar
thinomar

(usa Linux Mint)

Enviado em 24/06/2015 - 13:08h

Dei uma alterada no script 1:
#!/bin/bash
# Autor: AURELIO BRASIL
# Modificado por: Thiago Martins
# Script criar pasta e arquivos
#
# Entrada:
# ./script1.sh /diretorio/de/destino


# Verifica se foi informado algum
# diretorio para a criacao das pastas
# Se foi, atribui valor a variavel $dir,
# se nao foi, atribui (e cria) diretorio
# /tmp/script1 a $dir
if [ -z $1 ] ; then
dir=/tmp/script1
mkdir -p $dir
else
dir=$1
fi

# Entra no diretorio
cd $dir

# Contador
i=1

# Cria pasta e arquivos, e imprime caminho
until [ $i -gt 4 ] ; do
mkdir -p ./pasta$i
touch ./pasta$i/arquivoA$i.txt
touch ./pasta$i/arquivoB$i.txt
touch ./pasta$i/arquivoC$i.txt
echo "Diretorio $dir/pasta$i/ criado!"

i=$(($i+1))
done


Apenas para constar, a opção -p no mkdir, inibe mensagens de erro.

EDIT:
A entrada é ./script1.sh /diretorio, mas se não informar o diretório onde serão criadas as pastas, ele cria em /tmp/script1/
--
-I've been talking to the main computer
-And...?
-It hates me


8. Re: Ajuda

thinomar
thinomar

(usa Linux Mint)

Enviado em 25/06/2015 - 13:35h

Dei uma mexida no script2 também:
#!/bin/bash
# Autor: AURELIO BRASIL
# Modificado por: Thiago Martins
# Script ler lista de nomes
#
# Entrada:
# ./script2.sh /diretorio/de/destino

# Verifica se foi informado algum
# diretorio. Caso nao tenha sido,
# encerra a execucao
if [ -z $1 ] ; then
echo "Favor informe o diretório"
echo "Entrada: script2.sh diretorio"
exit 1
fi

# Atribuicao do diretorio a variavel $dir
dir=$1

# Verifica se diretorio existe
# Caso nao exista, encerra a
# execucao
if [ ! -d $dir ] ; then
echo "Informe um diretorio valido"
exit 1
fi

# Contador
i=0

# Lista diretorios e arquivos e joga
# saida para arquivo /tmp/listfiles.txt
ls -l | grep -E "^d|^-" > /tmp/listfiles.txt

# Recebe linha a linha de /tmp/listfiles.txt
# e verifica se e arquivo ou diretorio
while read file ; do
# Se comeca com d de diretorio, entra
# no primeiro, senao, no segundo
if [[ $file =~ ^d ]] ; then
echo "Diretório: `echo $file | \
awk '{print $9}'`"
else
echo "Arquivo: `echo $file | \
awk '{print $9}'`"
fi
done < /tmp/listfiles.txt

# Remove /tmp/listfiles.txt
rm -f /tmp/listfiles.txt


EDIT:
Não sei se é exatamente isso que o exercício propõe, mas mesmo que não seja, dá pra montar o específico com o conteúdo desse que mandei :)
Alias, se quiser fazer que o script trabalhe recursivamente, mesmo havendo como fazer isso com o ls, recomendo que dê uma estudada em busca por largura ou por profundidade e tente implementar algum dos dois (ou os dois).
--
-I've been talking to the main computer
-And...?
-It hates me


9. Re: Ajuda

thinomar
thinomar

(usa Linux Mint)

Enviado em 25/06/2015 - 13:43h

Só achei chatinho isso de pedir while ou until em todos os scripts hehe
--
-I've been talking to the main computer
-And...?
-It hates me


10. Re: Ajuda

thinomar
thinomar

(usa Linux Mint)

Enviado em 25/06/2015 - 16:00h

script3:
#!/bin/bash
# Autor: AURELIO BRASIL
# Modificado por: Thiago Martins
# Script numero maior que o outro
#
# Entrada:
# ./script3.sh primeiroNum segundoNum

# Verifica se valores foram informados
if [[ -z $1 || -z $2 ]] ; then
echo "Faltam argumentos"
echo "Entrada: script3.sh num1 num2"
exit 1
fi

while true
do
# Verifica se sao iguais
if [ $1 -eq $2 ] 2> /dev/null ; then
echo "Valores iguais"
# Verifica se primeiro e maior que segundo
elif [ $1 -gt $2 ] 2> /dev/null ; then
echo "Primeiro valor ($1) maior que segundo ($2)"
# Verifica se segundo e maior que primeiro
elif [ $1 -lt $2 ] 2> /dev/null ; then
echo "Segundo valor ($2) maior que primeiro ($1)"
# Verifica se e caracter invalido
else
echo "Valor invalido"
fi

# Encerra execucao
exit
done


EDIT:
O WHILE é inutil ae, só coloquei pq o exercicio pede msm
--
-I've been talking to the main computer
-And...?
-It hates me


11. Mais Ajuda , Qual Seria a Resposta?

Aurelio Marques Brasil
aureliobrasil198

(usa Ubuntu)

Enviado em 01/07/2015 - 11:33h

var=1
count=0
until [ $var = "0" ]
do
<comando1>
<comando2>
if [ $count = "9" ]
then
var=0
fi
count=$(($count+1))
done

I. “count” é uma variável que tem a função de contar quantas vezes um bloco de
comandos será executado e o valor inicial atribuido a ele é “0”
II. A estrutura de repetição “until” executará o “comando1” e “comando2” enquanto o
a condição “[ $var = “0” ]” for verdadeira.
III. Se $count for igual a “9”, o valor de $var será igual a “0”.
IV. O incremento da variável “count” é realizada na “linha 11”
V. O laço “until” é quebrado quando $count for igual a “10” e $var for igual a “0”


12. Mais Ajuda , Qual Seria a Resposta?

Aurelio Marques Brasil
aureliobrasil198

(usa Ubuntu)

Enviado em 01/07/2015 - 11:54h


#!/bin/bash
backup ()
{
for a in Pasta_Aluno/*
do
if test -f $m
then
cp $m $m.bkp
echo "Backup de arquivo criado com exito"
echo
fi
if test -d $m
then
cp -r $n $n.bkp
echo "Backup de diretorio criado com exito"
echo
fi
done
for n in Pasta_Aluno/*.bkp
do
mv $n Backup_Aluno/
done
}
backup


I. A variável “a” ( linha 4) utilizada no laço de repetição usando “for” (linha 4) irá
receber todas as listas de objetos existentes na “Pasta_Aluno” e terá um papel
importantissimo durante o restante do código, principalmente no teste de verificaçao
de arquivo (linha 6).
II. As diferenças existentes na “linha 8” e “linha 14” em relação ao comando “cp” ,
deve-se: na “linha 8” está relacionada a uma cópia de lista de arquivos e na “linha 14”
está relacionada uma cópia de lista de diretórios.
III. Podemos afirmar há existência de dois laços de repetição no script. A primeira
iniciando (linha 5) e terminando (linha 18), porém com erros dentro do laço; A
segunda iniciando (linha 20) e terminando (linha 22), porém sem erros dentro do
laço.
IV. Caso exista arquivos com extensão (.bkp) dentro da pasta “Pasta_Aluno” e não
possua a pasta “Backup_Aluno”, os comandos na “linha 19” e “linha 21” funcionará
sem problemas.
V. Podemos afirmar que no script várias falhas serão mostradas caso venha a ser
executada. Por exemplo, as mensagens na “linha 9” e “linha 15”mostram o exito de
um resultado que não tem nada a ver com o comandos informados na “linha 8” e
“linha 14” respectivamente.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts