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