Entrada de argumento ao executar shell script. [RESOLVIDO]

1. Entrada de argumento ao executar shell script. [RESOLVIDO]

Ricardo Bisconsini
bisconsini

(usa Debian)

Enviado em 14/05/2022 - 18:33h

Boa tarde.

Sou bem novato em shell script e cada vez mais tenho usado para automatizar tarefas que repito com frequencia, entre meus scripts tenho esse que uso para fazer backup:

#!/bin/bash

read -p "Qual diretório deseja fazer o BackUp: " origem

read -p "Qual nome do arquivo de BackUp: " destino

echo "Fazendo Backup: $origem para $destino"

tar -zcvf $destino.tar.gz $origem

echo "Criptografando arquivo $destino"

gpg -c $destino.tar.gz

rm -rf $destino.tar.gz

echo "BackUp realizado e criptografado com suscesso!"


É muito basico, simplismente uma sequencia de comandos.

O que gostaria de fazer é que a entrada da pasta a ser sala fosse passada para o script quando executo ele no terminal.

Hoje executo o script assim ./backups.sh e depois ele me pergunta qual pasta salvar e o nome do arquivo de backup.

Gostaria de executar o script já informando como argumento a origrm e o destino assim: ./backups.sh /home/origem/ destino ( tirei essa ideia maluca lendo como o tar funciona, será que dá para fazer isso com shell-script ? )

Obrigado!








  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 15/05/2022 - 14:58h


bisconsini escreveu:

Boa tarde.

Sou bem novato em shell script e cada vez mais tenho usado para automatizar tarefas que repito com frequencia, entre meus scripts tenho esse que uso para fazer backup:

#!/bin/bash

read -p "Qual diretório deseja fazer o BackUp: " origem
read -p "Qual nome do arquivo de BackUp: " destino
echo "Fazendo Backup: $origem para $destino"
tar -zcvf $destino.tar.gz $origem
echo "Criptografando arquivo $destino"
gpg -c $destino.tar.gz
rm -rf $destino.tar.gz
echo "BackUp realizado e criptografado com suscesso!"


É muito basico, simplismente uma sequencia de comandos.

O que gostaria de fazer é que a entrada da pasta a ser sala fosse passada para o script quando executo ele no terminal.
Hoje executo o script assim ./backups.sh e depois ele me pergunta qual pasta salvar e o nome do arquivo de backup.

Gostaria de executar o script já informando como argumento a origrm e o destino assim:
./backups.sh /home/origem/ destino ( tirei essa ideia maluca lendo como o tar funciona, será que dá para fazer isso com shell-script ? )

Obrigado!

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Boa tarde bisconsini.
Não é uma ideia maluca, isso é bastante usual.....
E é bastante simples.
#!/bin/bash
if (($# == 2));then
[ -e $1 -a -e $2 ] && { echo OKAY;origem="$1";destino="$2";} || { echo "Erro, Dir Não existe";exit;}
else
echo "Erro, falta argumento/parâmetro";exit;
fi
echo -e "Fazendo Backup:\nDe: $origem\nPara: $destino"
-------------------------------------------------------------------------
#Sugestão:
read -p "Confirma? Ss|Nn:" -n1 resp
[ "${resp^}" = "S" ] && echo -e "\nProsseguir" || { echo -e "\nParar";exit;}

tar -zcvf $destino.tar.gz $origem
echo "Criptografando arquivo $destino"
gpg -c $destino.tar.gz
rm -rf $destino.tar.gz


Só executar:
./backups.sh /home/$USER/origem/ destino 

------------------------------------------------------------------
Sugiro que Teste se Destino e Origem existem.
Exemplo: Colocado acima
[ -e ${origem} -a -e ${destino} ] && echo Okay || { echo Erro;exit;}
-----------------------------------------------------------------

-----------------------------------------------------------------
Veja: https://aurelio.net/shell/canivete/#variaveis


______________________________________________________________________
Importante:
Se te ajudei, retribua.....
É simples, só marcar o tópico como resolvido e escolher a MELHOR RESPOSTA

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: Entrada de argumento ao executar shell script. [RESOLVIDO]

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 16/05/2022 - 16:03h

se tu tem que executar tarefas repetidas vezes o ideal seria tu dar uma olhada no ansible


4. Re: Entrada de argumento ao executar shell script. [RESOLVIDO]

Ricardo Bisconsini
bisconsini

(usa Debian)

Enviado em 16/05/2022 - 22:00h



Boa tarde bisconsini.
Não é uma ideia maluca, isso é bastante usual.....
E é bastante simples.
#!/bin/bash
if (($# == 2));then
[ -e $1 -a -e $2 ] && { echo OKAY;origem="$1";destino="$2";} || { echo "Erro, Dir Não existe";exit;}
else
echo "Erro, falta argumento/parâmetro";exit;
fi
echo -e "Fazendo Backup:\nDe: $origem\nPara: $destino"
-------------------------------------------------------------------------
#Sugestão:
read -p "Confirma? Ss|Nn:" -n1 resp
[ "${resp^}" = "S" ] && echo -e "\nProsseguir" || { echo -e "\nParar";exit;}

tar -zcvf $destino.tar.gz $origem
echo "Criptografando arquivo $destino"
gpg -c $destino.tar.gz
rm -rf $destino.tar.gz


Só executar:
./backups.sh /home/$USER/origem/ destino 



Muito obrigado Marcelo !

Sua solução me ajudou muito, alem de fazer o que eu queria ainda vai me render umas horas de estudo ;-) como falei não sou programador e nem tenho a intenção de me tornar um, mas acho a logica de programar muito interessante como exercício mental e estou sempre inventando umas coisas para exercitar.

Valeu!



5. Re: Entrada de argumento ao executar shell script. [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/05/2022 - 02:48h


bisconsini escreveu:



Boa tarde bisconsini.
Não é uma ideia maluca, isso é bastante usual.....
E é bastante simples.
#!/bin/bash
if (($# == 2));then
[ -e $1 -a -e $2 ] && { echo OKAY;origem="$1";destino="$2";} || { echo "Erro, Dir Não existe";exit;}
else
echo "Erro, falta argumento/parâmetro";exit;
fi
echo -e "Fazendo Backup:\nDe: $origem\nPara: $destino"
-------------------------------------------------------------------------
#Sugestão:
read -p "Confirma? Ss|Nn:" -n1 resp
[ "${resp^}" = "S" ] && echo -e "\nProsseguir" || { echo -e "\nParar";exit;}

tar -zcvf $destino.tar.gz $origem
echo "Criptografando arquivo $destino"
gpg -c $destino.tar.gz
rm -rf $destino.tar.gz


Só executar:
./backups.sh /home/$USER/origem/ destino 



Muito obrigado Marcelo !

Sua solução me ajudou muito, alem de fazer o que eu queria ainda vai me render umas horas de estudo ;-) como falei não sou programador e nem tenho a intenção de me tornar um, mas acho a logica de programar muito interessante como exercício mental e estou sempre inventando umas coisas para exercitar.

Valeu!

Por nada.
Valeu pela melhor resposta.....
Explicando os comandos que postei.
#!/bin/bash
#Se a quantidade de comandos é = 2
#Testa se os diretórios passado como argumento existem,
#caso positivo, define as variáveis, senão, sai.
# Para cada falha/acerto, mostra mensagem,
#Pede confirmação:
S|s continua,
N|n sai,
if (($# == 2));then
[ -e $1 -a -e $2 ] && { echo OKAY;origem="$1";destino="$2";} || { echo "Erro, Dir Não existe";exit;}
else
echo "Erro, falta argumento/parâmetro";exit;
fi
echo -e "Fazendo Backup:\nDe: $origem\nPara: $destino"
#-------------------------------------------------------------------------#
#Sugestão:
read -p "Confirma? Ss|Nn:" -n1 resp
[ "${resp^}" = "S" ] && echo -e "\nProsseguir" || { echo -e "\nParar";exit;}

Também não sou programador, faço para passar o tempo.....
Acabei de terminar um jogo do bingo, php, javascript, html, etc....

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________