AJUDA COM SHELL SCRIPT [RESOLVIDO]

1. AJUDA COM SHELL SCRIPT [RESOLVIDO]

Célio Junior
celiomagalhaesjr

(usa Ubuntu)

Enviado em 12/01/2017 - 20:27h

Criei um script que funciona assim:

Eu crio um usuario e ele criar um arquivo chamado backup, para dentro desse arquivo são enviadas as seguintes linhas:


## Play backup celiojr94
useradd -e 2017-02-11 -M -s /bin/false -p celiojr94 celiojr94
echo -e '\033[01;32mRestauração do usuário\033[00;37m' celiojr94 '\033[01;32mrealizado com sucesso!!\033[00;37m'
## End backup user celiojr94
sleep 1


Agora eu gostaria que quando eu deletasse o usuario essas linhas no arquivo fossem deletadas, como faço isso?


  


2. MELHOR RESPOSTA

Lui
drizze

(usa Linux Mint)

Enviado em 12/01/2017 - 22:46h

Fiz um pequeno script para te ajudar:

#!/bin/bash
filename=$1
findpattern=$2

if [ -z "$filename" ]
then
echo "Falta parâmetro nome do arquivo"
exit 1
fi

if [ ! -z "$findpattern" ];
then
echo "Procurando por ${findpattern} em ${filename}"
findline="$(cat ${filename} | grep ${findpattern} -n | head -n 1 | cut -d : -f 1)"

if [ ! -z "$findline" ];
then
lineoffset=$((findline+4));
sed "${findline},${lineoffset}d" $filename
else
echo "${findpattern} não encontrado"
fi
else
echo "Falta parâmetro findpattern"
exit 1
fi


Explicação do script acima:
Vamos supor que você pegou o script e salvou como deleta.sh.
O script exige 2 argumentos, o primeiro o nome do arquivo e o segundo o nome do usuário. Exemplo:
./deleta.sh backup celiorj94 


Ele pegará o número da linha da primeira ocorrência, somará pela lineoffset (ver linha 18, variável lineoffset):
findline="$(cat ${filename} | grep ${findpattern} -n | head -n 1 | cut -d : -f 1)" 


Seto o "lineoffset" (última linha a deletar):
lineoffset=$((findline+4)); 


E com o comando sed, deleto as linhas específicas:
sed "${findline},${lineoffset}d" $filename 


Será retornado todo o documento, com exceção das linhas do usuário, partindo de (ver linha 18, variável lineoffset):
## Play backup celiojr94 


até
sleep 1 


A ideia é substituir o arquivo antigo (ANTES DE TESTAR, FAÇA BACKUP):
./deleta.sh backup celiojr94 > backup 


É um pequeno script para estudos. Fique a vontade para aprimorá-lo ;)

3. Re: AJUDA COM SHELL SCRIPT

Célio Junior
celiomagalhaesjr

(usa Ubuntu)

Enviado em 13/01/2017 - 00:02h

drizze escreveu:

Fiz um pequeno script para te ajudar:

#!/bin/bash
filename=$1
findpattern=$2

if [ -z "$filename" ]
then
echo "Falta parâmetro nome do arquivo"
exit 1
fi

if [ ! -z "$findpattern" ];
then
echo "Procurando por ${findpattern} em ${filename}"
findline="$(cat ${filename} | grep ${findpattern} -n | head -n 1 | cut -d : -f 1)"

if [ ! -z "$findline" ];
then
lineoffset=$((findline+4));
sed "${findline},${lineoffset}d" $filename
else
echo "${findpattern} não encontrado"
fi
else
echo "Falta parâmetro findpattern"
exit 1
fi


Explicação do script acima:
Vamos supor que você pegou o script e salvou como deleta.sh.
O script exige 2 argumentos, o primeiro o nome do arquivo e o segundo o nome do usuário. Exemplo:
./deleta.sh backup celiorj94 


Ele pegará o número da linha da primeira ocorrência, somará pela lineoffset (ver linha 18, variável lineoffset):
findline="$(cat ${filename} | grep ${findpattern} -n | head -n 1 | cut -d : -f 1)" 


Seto o "lineoffset" (última linha a deletar):
lineoffset=$((findline+4)); 


E com o comando sed, deleto as linhas específicas:
sed "${findline},${lineoffset}d" $filename 


Será retornado todo o documento, com exceção das linhas do usuário, partindo de (ver linha 18, variável lineoffset):
## Play backup celiojr94 


até
sleep 1 


A ideia é substituir o arquivo antigo (ANTES DE TESTAR, FAÇA BACKUP):
./deleta.sh backup celiojr94 > backup 


É um pequeno script para estudos. Fique a vontade para aprimorá-lo ;)


Eu testei mas ele não encontra a pessoa , mesmo colocando certinho :'( , poderia me ajudar?
Olha o retorno :

 
root@rkmyckq2qz:~# ./1.sh backup.sh celiojr94
Procurando por celiojr94 em backup.sh

root@rkmyckq2qz:~# ./1.sh backup.sh celiojr94
Procurando por celiojr94 em backup.sh

root@rkmyckq2qz:~# cat backup.sh
## Play backup celiojr94
useradd -e 2017-02-11 -M -s /bin/false -p celiojr94 celiojr94
echo -e '\033[01;32mRestauração do usuário\033[00;37m' celiojr94 '\033[01;32mrea lizada com sucesso!!\033[00;37m'
## End backup user celiojr94
sleep 1

root@rkmyckq2qz:~#





4. Re: AJUDA COM SHELL SCRIPT

Lui
drizze

(usa Linux Mint)

Enviado em 13/01/2017 - 00:16h

Está retornando em branco, quer dizer que encontrou e deletou.
Adicione umas linhas abaixo e faça o teste novamente, você verá que ele retornará com as linhas do backup deletadas.

Por exemplo:

## Play backup celiojr94
useradd -e 2017-02-11 -M -s /bin/false -p celiojr94 celiojr94
echo -e '\033[01;32mRestauração do usuário\033[00;37m' celiojr94 '\033[01;32mrea lizada com sucesso!!\033[00;37m'
## End backup user celiojr94
sleep 1
essa linha não será deletada
nem essa
e nem essa


Percebi que não é para apagar o sleep 1, então, poderá na linha 18 ao inveś de somar 4 some 3. Fazendo isso, não irá deletar o sleep 1

Agora, se é para apagar o documento inteiro, basta fazer um:
echo "" > backup.sh 



5. Re: AJUDA COM SHELL SCRIPT

Célio Junior
celiomagalhaesjr

(usa Ubuntu)

Enviado em 13/01/2017 - 00:22h

drizze escreveu:

Está retornando em branco, quer dizer que encontrou e deletou.
Adicione umas linhas abaixo e faça o teste novamente, você verá que ele retornará com as linhas do backup deletadas.

Por exemplo:

## Play backup celiojr94
useradd -e 2017-02-11 -M -s /bin/false -p celiojr94 celiojr94
echo -e '\033[01;32mRestauração do usuário\033[00;37m' celiojr94 '\033[01;32mrea lizada com sucesso!!\033[00;37m'
## End backup user celiojr94
sleep 1
essa linha não será deletada
nem essa
e nem essa


Agora, se é para apagar o documento inteiro, basta fazer um:
echo "" > backup.sh 


Na verdade gostaria de apagar linhas especificas, apenas as que contem o referido usuario. Exemplo:


## Play backup celiojr94
useradd -e 2017-02-11 -M -s /bin/false -p celiojr94 celiojr94
echo -e '\033[01;32mRestauração do usuário\033[00;37m' celiojr94 '\033[01;32mrea lizada com sucesso!!\033[00;37m'
## End backup user celiojr94
sleep 1


Nesse caso acima , de ## Play backup celiojr94 até sleep 1


6. Re: AJUDA COM SHELL SCRIPT [RESOLVIDO]

Célio Junior
celiomagalhaesjr

(usa Ubuntu)

Enviado em 13/01/2017 - 02:04h

Fiz algumas modificações para me atender, perfeito... muito obrigado pela ajuda... Sem vc eu nao conseguiria


7. Re: AJUDA COM SHELL SCRIPT [RESOLVIDO]

Lui
drizze

(usa Linux Mint)

Enviado em 13/01/2017 - 08:51h

celiomagalhaesjr escreveu:

Fiz algumas modificações para me atender, perfeito... muito obrigado pela ajuda... Sem vc eu nao conseguiria


Disponha. Apenas se possível, marque o tópico como resolvido clicando no link [Resolvido] no post principal do tópico (no primeiro, o seu). Assim, ficará mais fácil de encontrar para quem também estiver procurando uma solução parecida, ou até mesmo organizar a comunidade.

Obrigado xD


8. Re: AJUDA COM SHELL SCRIPT [RESOLVIDO]

Célio Junior
celiomagalhaesjr

(usa Ubuntu)

Enviado em 13/01/2017 - 09:59h

drizze escreveu:

celiomagalhaesjr escreveu:

Fiz algumas modificações para me atender, perfeito... muito obrigado pela ajuda... Sem vc eu nao conseguiria


Disponha. Apenas se possível, marque o tópico como resolvido clicando no link [Resolvido] no post principal do tópico (no primeiro, o seu). Assim, ficará mais fácil de encontrar para quem também estiver procurar uma solução parecida, ou até mesmo organizar a comunidade.

Obrigado xD


Eu iria fazer isso ontem mesmo quando respondi aquui, porem minha internet caiu .... Deveriam estar fazendo uma "Má'nutenção rsrs







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts