Scripts shell Ășteis em qualquer programa

Bater É um programa de computador cuja função Ă© interpretar ordens. É baseado na concha de Unix e foi escrito para o projeto GNU sendo o shell padrĂŁo na maioria das distribuiçÔes de GNU / Linux. Seu nome Ă© uma sigla para Shell Bourne-Again (outro shell bourne), fazendo um jogo de palavras (nascer de novo significa renascimento) em Concha Bourne (sh), que foi um dos primeiros grandes intĂ©rpretes do Unix.

Hoje vamos mostrar alguns scripts de shell que podem ser muito Ășteis para desenvolvedores. A maioria funciona em qualquer shell Unix, embora alguns exijam que sejam especificamente executados por Bater.

Impedir que usuĂĄrios nĂŁo privilegiados executem o script

Alguns scripts executam tarefas administrativas, portanto, podemos desejar que apenas o usuĂĄrio root execute o script. Nesse caso, podemos usar algo assim:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

Permitir a execução de script apenas para um usuårio específico

Semelhante ao cĂłdigo acima, podemos desejar que apenas um usuĂĄrio especĂ­fico execute o script. NĂłs fazemos isso:

#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi

Verifique se um serviço / processo estå em execução

Se quisermos saber se existem processos de algum serviço ou programa em execução, poderíamos usar este script (neste caso, verifica que o demÎnio de apache estå correndo):

#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi

Crie um arquivo de bloqueio

Às vezes, temos que garantir que o script nĂŁo seja executado duas ou mais vezes ao mesmo tempo. Para isso podemos fazer uso dos arquivos de bloqueio. Esta Ă© uma versĂŁo simples de um script que nos permite fazer isso:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi

Neste caso, verifica-se que o arquivo tanto faz. existir. Caso exista, o script NÃO executa suas tarefas. Se não existir, ele cria o arquivo, executa as tarefas necessårias e o remove. Mas, isso não é totalmente confiåvel. O que aconteceria se enquanto nosso script estivesse em execução ele fosse fechado abruptamente?

Nesse caso, o arquivo de bloqueio não seria excluído e, portanto, não nos permitiria executar o script novamente. Para cobrir esses casos, poderíamos fazer uso do comando trap, que nos permite executar comandos no caso de nosso script terminar inesperadamente. Esta é uma versão mais avançada que também salva o PID do script que o executa dentro do arquivo de bloqueio:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi

Vamos entender o comando um pouco melhor armadilha. Sua sintaxe Ă© basicamente esta: sinal de comando trap [sinal ...]; onde sinal Ă© o sinal de terminação que vocĂȘ deseja capturar. Se vocĂȘ quiser ver uma lista de sinais disponĂ­veis, vocĂȘ pode executar o comando kill -l. Para o caso anterior, os sinais INT foram usados (captura a terminação produzida por um Ctrl + c), PRAZO (rescisĂŁo produzida pelo comando kill) e SAIR (encerramento normal de um script, seja porque nĂŁo hĂĄ mais linhas para executar ou porque se depara com o comando de saĂ­da).

Menu OpçÔes

Para fazer um menu onde permitimos ao usuårio selecionar uma série de opçÔes, podemos usar o seguinte esquema:

#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done

Peça confirmação antes de executar um script

Às vezes, Ă© Ăștil que o usuĂĄrio confirme a execução de um lote de instruçÔes, ou seja, a mensagem tĂ­pica que pede ao usuĂĄrio para digitar sim ou nĂŁo. Podemos fazer isso assim:

#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"

Fim do artigo. Simplesmente Ăłtimo 

Eu edito: VocĂȘ tem que ter cuidado com espaços e tabulaçÔes, que por algum motivo nĂŁo estĂŁo saindo


Adicionar como fonte preferencial no Google