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