Meu shell script não funciona!!

1. Meu shell script não funciona!!

Fabio Luiz Moreira
Raijin

(usa Ubuntu)

Enviado em 04/04/2015 - 17:20h

E ai galera.
Sou novo em linux, estou aprendendo com o debian no meu curso de redes.
Não sei ao certo se estou fazendo a pergunta no lugar correto. Mas desde já agradeço.
Seguinte, recentemente aprendi a criar funções ( aquelas com NOME_DA_FUNÇÃO() { ....} ), mas ainda não compreendo muitas coisas.
Eu criei um pequeno exercicio solicitado em sala de aula...mas não sei pq o danado não quer mais funfar.
Já dei permissão de root (chmod 777 nome do arquivo ), ja dei tapa na cara, ameacei de morte...mas não sei o que tem de errado.
Eu ultilizo o gedit e geralmente ao criar uma função() a mesma muda de cor quando salvo e tem horas que nem isso mais ta fazendo.
segue abaixo o script ( perdoem minha ignorância )
#!/bin/bash

option () {
echo "[ 1 ] Calendario"
echo "[ 2 ] Limpar tela"
echo "[ 3 ] Criar 4 arquivos"
echo "[ 4 ] Desligar a maquina"
echo "[ 5 ] Reiniciar a maquia em 30 seg"
echo "[ 6 ] Somar 2 numeros"
echo "[ 7 ] Multiplicar 2 numero"
echo "[ 8 ] Fazer fatoria de um numero"
echo "[ 9 ] Juntar e compactar 3 dos 4 arquivos"
echo "[ 10 ] Sair"
echo
echo -n "Qual a opcao desejada ?escolha bem sua opção!! "
read opcao
case $opcao in
1) calendario ;;
2) limpar ;;
3) criar ;;
4) desligar ;;
5) reiniciar ;;
6) somar ;;
7) mutiplicar ;;
8) fatorial ;;
9) compactar ;;
10) exit ;;
*) "Opcao desconhecida." ; echo ; Principal ;;
esac
}

calendario () {
echo "Olá"
cal
options
}
limpar () {
clear
echo " limpesa concluida"
options
}
criar () {
echo "Digite o nome dos 4 arquivos a serem criados:"
read arquivo
touch $arquivo
options
}
desligar (){
halt
echo "pressione ctrl+c para cancelar o desligamento"
options
}
reiniciar () {
shutdown -r -t 00 30
options
}
somar () {
echo -n "entre com 2 valores numericos:"
read a b
let c=0
let c=a+b
echo $((c))
options
}
multiplicar (){
echo -n "entre com 2 valores numericos:"
read a b
let c=0
let c=a*b
echo $((c))
options
}
fatorial () {
#!/bin/bash
#O fatorial é cálculado da seguinte forma:
#fatorial de 3: 3x2x1 = 6
#fatorial de 4: 4x3x2x1 = 24

echo "Digite o número que queria saber o fatorial: "
read num

fat=1
for ((i=1; i <= $num ; i++))
do
fat=$(($fat*$i))

done

echo "O fatorial de $num é: $fat "
options
}

compactar () {
tar -cvzf .tar.gz $arquivo a b c
options
}



  


2. Re: Meu shell script não funciona!!

Leandro Nkz
Leandro

(usa Arch Linux)

Enviado em 04/04/2015 - 18:33h

Você fez quase tudo certo. Só faltou o "ponto de partida" do script: chamar a função principal.
Outra coisa: a função principal chama "option", mas as outras funções a chamam erroneamente de "options".

Veja o script corrigido:


#!/bin/bash

options () {
echo "[ 1 ] Calendario"
echo "[ 2 ] Limpar tela"
echo "[ 3 ] Criar 4 arquivos"
echo "[ 4 ] Desligar a maquina"
echo "[ 5 ] Reiniciar a maquia em 30 seg"
echo "[ 6 ] Somar 2 numeros"
echo "[ 7 ] Multiplicar 2 numero"
echo "[ 8 ] Fazer fatoria de um numero"
echo "[ 9 ] Juntar e compactar 3 dos 4 arquivos"
echo "[ 10 ] Sair"
echo
echo -n "Qual a opcao desejada ?escolha bem sua opção!! "
read opcao
case $opcao in
1) calendario ;;
2) limpar ;;
3) criar ;;
4) desligar ;;
5) reiniciar ;;
6) somar ;;
7) multiplicar ;;
8) fatorial ;;
9) compactar ;;
10) exit ;;
*) "Opcao desconhecida." ; echo ; Principal ;;
esac
}

calendario () {
echo "Olá"
cal
options
}
limpar () {
clear
echo " limpesa concluida"
options
}
criar () {
echo "Digite o nome dos 4 arquivos a serem criados:"
read arquivo
touch $arquivo
options
}
desligar (){
halt
echo "pressione ctrl+c para cancelar o desligamento"
options
}
reiniciar () {
shutdown -r -t 00 30
options
}
somar () {
echo -n "entre com 2 valores numericos:"
read a b
let c=0
let c=a+b
echo $((c))
options
}
multiplicar (){
echo -n "entre com 2 valores numericos:"
read a b
let c=0
let c=a*b
echo $((c))
options
}
fatorial () {
#!/bin/bash
#O fatorial é cálculado da seguinte forma:
#fatorial de 3: 3x2x1 = 6
#fatorial de 4: 4x3x2x1 = 24

echo "Digite o número que queria saber o fatorial: "
read num

fat=1
for ((i=1; i <= $num ; i++))
do
fat=$(($fat*$i))

done

echo "O fatorial de $num é: $fat "
options
}

compactar () {
tar -cvzf .tar.gz $arquivo a b c
options
}

#Executa a função principal
options




3. Re: Meu shell script não funciona!!

Fabio Luiz Moreira
Raijin

(usa Ubuntu)

Enviado em 04/04/2015 - 19:59h

Testei aqui kra. MUITO OBRIGADO.
Mais uma pergunta, pra quem puder responder.
Dá pra usar a função 3 e 9 separadas??
da forma que eu fiz ainda não deu certo.
Muito obrigado


4. Re: Meu shell script não funciona!!

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 07/04/2015 - 18:30h


certeza que deu tudo certo com as opções 3 e a 9?

tar -cvzf .tar.gz $arquivo a b c

esse comando da funcao compactar gera um arquivo com o nome (sem nada aqui).tar.gz ... é isso que você quer mesmo?
segundo está sempre colocando além dos arquivos digitados os arquivos A, B e C.

eu faria algo assim:
tar -cvzf arq_saida.tar.gz $arquivo

Agora vamos ao segundo ponto... pq não funciona o compactar sem o criar??? porque vc não define os arquivos na função compactar ... apenas na criar.

Logo se vc chama a opção 9 a variavel $arquivo está vazia ... checa se isso acontecer e pede para informar os arquivos ... tipo assim:

compactar () {

if [ -z $arquivo ]; then
echo "Digite o nome dos arquivos a serem compactados:"
read arquivos
fi
tar -cvzf arq_saida.tar.gz $arquivo
options
}



5. Re: Meu shell script não funciona!!

Fabio Luiz Moreira
Raijin

(usa Ubuntu)

Enviado em 08/04/2015 - 03:13h

Então, minha primeira duvida era pq o script não funcionava ( desculpem minha ignorância ). Resolvido.Tinha esquecido de chamar a função.
A segunda duvida era que eu não sabia como usar a função 9 depois da 3.
ex:
1° - função 3:
*echo "Digite o nome dos 4 arquivos a serem criados:"
o usuário iria escrever por exemplo :
* cachorro foto tênis livro
a função iria ler o conteúdo e o touch faria o resto ( certo ??)

Eu não tinha completado a função 9 justamente pq não sabia como usa-la nesse caso.

2° função 9:
* os arquivos cachorro,foto,tênis,livro foram criados .... mas como eu mando a função 9 compactar os arquivos "foto,tenis e livro" por exemplo ( somente os 3 dos 4 criados )??

Por isso eu fiz daquela forma e não tinha nomeado. Muito obrigado desde já pra quem tem me ajudado.


6. Re: Meu shell script não funciona!!

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 08/04/2015 - 17:03h


então com relacao ao 9 funcionar usa isso:

compactar () {

if [ -z $arquivo ]; then
echo "Digite o nome dos arquivos a serem compactados:"
read arquivos
fi
tar -cvzf arq_saida.tar.gz $arquivo
options
}


A diferença é o if ...
if [ -z $arquivo ]; quer dizer se a variável $arquivo for vazia ele pede para voce completar ....
mas se você quizer que ele sempre pergunte os arquivos ... usa uma variavel nova tipo:

compactar () {
echo "Digite o nome dos arquivos a serem compactados:"
read arquivos_para_compactar
tar -cvzf arq_saida.tar.gz $arquivos_para_compactar
options
}




7. Re: Meu shell script não funciona!!

Fabio Luiz Moreira
Raijin

(usa Ubuntu)

Enviado em 09/04/2015 - 02:36h


Muito obrigado a todos que me ajudaram. Vou testar aqui!!


8. Treta na função 9

Fabio Luiz Moreira
raijin

(usa Ubuntu)

Enviado em 11/04/2015 - 23:46h


Seguinte galera ( já to parecendo chato já, alem de burro ). Sabe um array ??então eu sei que este é uma variável que pode armazenar vários valores dentro dele.A ideia que to tentando fazer no meu exercício é algo similar ( sei que ainda sou bem bobão em linux, desculpa ).
- para acessar um o conteúdo especifico de um array você deve especificar assim :
EX:
arquivo=( gato cachorro vaca pássaro)
[0] [1] [2] [3]

Para visualizar o cachorro devo fazer:
$ {arquivo[1]}

certo...agora o que isso tem a ver com o script acima?!

Quero criar 4 arquivos ao executar a função 3.
Mas ao utilizar a função 9..só quero compactar 3 dos 4 arquivos criados.
É bem besta isso eu sei, mas por algum motivo não consigo fazer isso.
A minha ultima duvida é ( talvez não esteja sabendo explicar):

Função 3:
criar 4 arquivos:
touch arquivo1 arquivo2 arquivo3 arquivor4
função 9:
compactar 3 dos arquivos criados:
tar -cvzf arq_saida.tar.gz $arquivo #### neste caso eu tentei fazer igual o array

tar -cvzf arq_saida.tar.gz ${arquivo[0] [2] [3]} ### onde somente os arquivos : arquivo1 arquivo3 arquivo4 serão compactados.

Mas eu não estou acertando fazer isso.
Espero ter explicado corretamente!!
Muito obrigado.


9. Re: Meu shell script não funciona!!

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 12/04/2015 - 11:29h

Acho que seria só isso

tar -cvzf arq_saida.tar.gz ${arquivo[0]} ${arquivo[1]} ${arquivo[3]}



10. Re: Meu shell script não funciona!!

Fabio Luiz Moreira
raijin

(usa Ubuntu)

Enviado em 14/04/2015 - 18:53h

Blz, galera. Acho que não tem jeito né ( bom pelo menos eu não sei ainda ).
O novo script ficou assim:

#!/bin/bash

options () {
echo "[ 1 ] Calendario"
echo "[ 2 ] Limpar tela"
echo "[ 3 ] Criar 4 arquivos"
echo "[ 4 ] Desligar a maquina"
echo "[ 5 ] Reiniciar a maquina"
echo "[ 6 ] Somar 2 numeros"
echo "[ 7 ] Multiplicar 2 numero"
echo "[ 8 ] Fazer fatoria de um numero"
echo "[ 9 ] Juntar e compactar 3 dos 4 arquivos"
echo "[ 10 ] Sair"
echo
echo -n "Qual a opcao desejada ?escolha bem sua opção!! "
read opcao
case $opcao in
1) calendario ;;
2) limpar ;;
3) criar ;;
4) desligar ;;
5) reiniciar ;;
6) somar ;;
7) multiplicar ;;
8) fatorial ;;
9) compactar ;;
10) exit ;;
*) "Opcao desconhecida." ; echo ; Principal ;;
esac
}

calendario () {
echo "Olá"
cal
options
}
limpar () {
clear
echo " limpesa concluida"
options
}
criar () {
echo "Digite o nome dos 4 arquivos a serem criados:"
read arquivo
touch $arquivo
options
}
desligar (){
halt
echo "pressione ctrl+c para cancelar o desligamento"
options
}
reiniciar () {
reboot
options
}
somar () {
echo -n "entre com 2 valores numericos:"
read a b
let c=0
let c=a+b
echo $((c))
options
}
multiplicar (){
echo -n "entre com 2 valores numericos:"
read a b
let c=0
let c=a*b
echo $((c))
options
}
fatorial () {
#!/bin/bash
#O fatorial é cálculado da seguinte forma:
#fatorial de 3: 3x2x1 = 6
#fatorial de 4: 4x3x2x1 = 24

echo "Digite o número que queria saber o fatorial: "
read num

fat=1
for ((i=1; i <= $num ; i++))
do
fat=$(($fat*$i))

done

echo "O fatorial de $num é: $fat "
options
}

compactar () {
tar -cvzf arq_saida.tar.gz ${arquivo[0]} ${arquivo[1]} ${arquivo[3]} ## compacta os 4 arquivos ao invez de somente 3 deles
options
}

#Executa a função principal
options

##Na função 9, consegui ( graças a ajuda de vcs) compactar os arquivos criados na função 3.Mas ao invez de compactar somente os selecionados ( 3 dos 4 criados ), ele compacta os 4.Acredito que existe um jeito de fazer isso ( não sei a sintaxe correta) por isso vou insistir no post.
Mas novamente..muito obrigado a todos.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts