Adaptação de script BAT para shell script

Iniciado por lacerdagamer, 29 de Setembro de 2014, 10:00

tópico anterior - próximo tópico

lacerdagamer

Bom dia senhores do conselho  ;D ;D

Sou especialista Windows e preciso de um norte em Linux. No Windows fiz o BAT abaixo para copiar pasta de perfil de um computador para um HD externo, por exemplo. Este BAT solicita que o técnico informe o caminho do perfil (ex.: "d:\users\USUARIO"), um titulo para o backup (para organizar melhor, sabe? Digamos que o tecnico decidiu por "TESTE") e por ultimo, a letra do HD externo (e:, f:, g:, h: ...)
Ao rodar o BAT o script lê as informações digitadas pelo técnico, entende qual perfil a ser copiado, entende em qual letra do Windows está o HD externo, cria uma pasta com o titulo designado pelo tecnico e copia as pastas do perfil para a pasta criada no HD.

Sei que no Linux o comando "cp" come com farinha as cópias, mas eu preciso de um norte, pois preciso fazer, assim como fiz no Windows:

- A possibilidade de questionar o usuario sobre as opções e salva-las em variáveis (como faço com set ChoixMenu='' set /p ChoixMenu=%Choice%)

Isso eu ainda não sei fazer no Linux  ??? ???

O tecnico vai rodar um live do Linux, certamente o Ubuntu 12.04, no computador que tem o Windows instalado e com o perfil a ser copiado;
Plugar o HD externo;
abrir o terminal e rodar como root o script proposto

Alguem dos developers pra me dar um norte??  :)

Meu script BAT em Windows:

@echo off
title ORIGEM DO BACKUP
echo.
echo.
echo       DIGITE A ORIGEM, POR EXEMPLO D:\USERS\JOAOMARIA
echo.
echo.
echo.
echo       NAO ADICIONE BARRA APOS O CAMINHO DE ORIGEM
echo.
echo.
echo.
echo       POR EXEMPLO: D:\USERS\JOAOMARIA E NAO D:\USERS\JOAOMARIA\
echo.
echo.
set ChoixMenu=''
set /p ChoixMenu=%Choice% CAMINHO:
:menu02
CLS
title TITULO DO BACKUP
echo.
echo.
echo       DIGITE UM TITULO SEM ESPACOS
echo.
echo.
echo.
echo       POR EXEMPLO, O PROPRIO NOME DO USUARIO: JOAOMARIA
echo.
echo.
echo.
set ChoiZMenu=''
set /p ChoiZMenu=%ChoZce% TITULO DO BACKUP:
:MENU03
CLS
title DESTINO DO BACKUP
echo.
echo.
echo.
echo       DIGITE A LETRA DO HD EXTERNO, POR EXEMPLO J:
echo.
echo.
echo.
set ChoiyMenu=''
set /p ChoiyMenu=%Choyce% DESTINO:
echo %ChoixMenu%
pause
START /WAIT robocopy /E %ChoixMenu%\Desktop\ %ChoiyMenu%\%ChoiZMenu%\Desktop\
START /WAIT robocopy /E %ChoixMenu%\Contacts\ %ChoiyMenu%\%ChoiZMenu%\Contacts\
START /WAIT robocopy /E %ChoixMenu%\Downloads\ %ChoiyMenu%\%ChoiZMenu%\Downloads\
START /WAIT robocopy /E %ChoixMenu%\Documents\ %ChoiyMenu%\%ChoiZMenu%\Documents\
START /WAIT robocopy /E %ChoixMenu%\Favorites\ %ChoiyMenu%\%ChoiZMenu%\Favorites\
START /WAIT robocopy /E %ChoixMenu%\Pictures\ %ChoiyMenu%\%ChoiZMenu%\Pictures\
START /WAIT robocopy /E %ChoixMenu%\Music\ %ChoiyMenu%\%ChoiZMenu%\Music\
START /WAIT robocopy /E %ChoixMenu%\Videos\ %ChoiyMenu%\%ChoiZMenu%\Videos\
PAUSE
START /WAIT robocopy /E C:\Arquivos de programas RFB\ %ChoiyMenu%\%ChoiZMenu%\ArquivosdeprogramasRFB\
:TERMINADO
ECHO TERMINOU
PAUSE > NUL

lacerdagamer

Senhores, já percebi que o rsync pode me ajudar. Ele parece bem completo, assim como o robocopy no Windows.

O que eu preciso saber fazer é um script que:

script:
#!/bin/bash
Qual a pasta do perfil do usuario? >>> O usuario então vai digitar o caminho, o script vai armazenar %perfil% (por exemplo)
Qual o titulo deste backup? >>> O usuario então vai digitar o titulo, o script vai armazenar em %titulo% (por exemplo)
**o caminho do HD montado será definido autom,aticamente, sem intervenção do tecnico. chamarei de %caminho% **
rsync -vhr %perfil% %caminho%%titulo% (onde %perfil% poderia ser /media/dados/perfil, e %caminho%%titulo% seria /mnt/hdexterno/backup)


Entenderam??  ;D


selvaking

O comando no bash pra solicitar entrada e armazenar numa variável é o "read"

Exemplo abaixo:
#!/bin/bash

clear
read -p "Please enter your name  : " name
echo ""
read -p "Please enter your age  : " age
echo ""
read -p "Please enter your sex. Male/Female  : " sex
echo ""
echo "So you're a $age year old $sex called $name"
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

lacerdagamer

#3
SHOW de bola!!! Era isso mesmo que eu queria, amigo!! Olha como ficou meu script, está 100% funcional (já testei):

#!/bin/bash
echo " "
read -p "Caminho do Perfil : " perfil >>>>O tecnico coloca o caminho, por exemplo /media/Dados/Users/PERFIL/
echo ""
read -p "Caminho destino do HD Externo : " Externo >>>>O tecnico coloca o caminho do HD externo, por exemplo /media/HDEXTERNO/
echo ""
read -p "Pasta a criar no HD Externo para abrigar o backup : " Pasta >>>>O tecnico coloca uma pasta para abrigar o backup no HD, por exemplo BACKUPFULANO
echo ""
cd /media/HDEXTERNO/ >>>>O script entra no HD
mkdir $Pasta/ >>>> Cria a pasta definida anteriormente (BACKUPFULANO)
cp -vr $perfil $Externo/$Pasta/ >>>> Copia o conteudo do perfil para a pasta criada no HD externo, com os dados fornecidos pelo técnico
exit 0
>>>> Sai.

Show de bola!!!!
Só tem um porém... Não encontrei na documentação do CP como gerar um arquivo de log contendo os dados copiados. Existe essa possibilidade, algo como um "cp -l" ?? Ou eu crio um redirecionador da saida do "cp -v" (verbose) para um txt?? Oq vc acha??

Abraço,muito obrigado mesmo!!!  ;D ;D ;D

EDITADO:
Usei "| tee -a /media/HDEXTERNO/$Pasta/log.txt" para gravar o arquivo de log.txt e mostrar também a saida na tela =)

FINALIZADO! Obrigado aos envolvidos!!  ;D ;D

#!/bin/bash
echo " "
read -p "Nome do Perfil do usuario exatemente como esta em D:\Users\ : " perfil
echo " "
echo " "
echo PERFIL A SER COPIADO: $perfil
echo " "
echo " "
read -p "Pasta que sera criada no HD Externo para abrigar o backup : " Pasta
echo " "
echo " "
echo PASTA A SER CRIADA: $Pasta
echo " "
echo " "
cd /media/HDEXTERNO/
mkdir $Pasta/
clear
echo COPIANDO ARQUIVOS... AGUARDE...
cp -vr /media/Dados/Users/$perfil /media/HDEXTERNO/$Pasta/ | tee -a /media/HDEXTERNO/$Pasta/log.txt
clear
echo " "
echo " "
echo PERFIL $perfil COPIADO COM SUCESSO PARA $Pasta NO HD EXTERNO
echo " "
echo " "
echo CONFIRA O LOG DA COPIA EM /$Pasta/log.txt DENTRO DO HD EXTERNO
exit 0