Mga kapaki-pakinabang na script ng shell sa anumang programa

Malakas na palo Ito ay isang programa sa computer na ang pagpapaandar ay upang bigyang kahulugan ang mga order. Ito ay batay sa shell ng Unix at isinulat para sa proyekto GNU pagiging default na shell sa karamihan ng mga pamamahagi ng GNU / Linux. Ang kanyang pangalan ay isang akronim para sa Bourne-Muli Shell (isa pang shell bourne), paggawa ng isang dula sa mga salita (ipinanganak na muli ay nangangahulugang muling pagsilang) sa Bourne shell (sh), na kung saan ay isa sa mga pangunahing pangunahing interpreter ng Unix.

Ngayon ay magpapakita kami ng ilang mga script ng shell na maaaring maging lubhang kapaki-pakinabang para sa mga developer. Karamihan sa mga nagtatrabaho sa anumang shell Unix, kahit na ang ilan ay nangangailangan na sila ay partikular na naisakatuparan ng Malakas na palo.

Pigilan ang mga hindi gumagamit na pribilehiyo mula sa pagpapatakbo ng script

Ang ilang mga script ay nagsasagawa ng mga pang-administratibong gawain kaya maaaring gusto lang namin ang root user na patakbuhin ang script. Sa kasong iyon maaari naming gamitin ang isang bagay tulad nito:

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

Payagan lamang ang pagpapatupad ng script sa isang tukoy na gumagamit

Katulad ng code sa itaas, baka gusto lang namin ng isang tukoy na gumagamit na patakbuhin ang script. Ginagawa namin ito kaya:

#!/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

I-verify na tumatakbo ang isang serbisyo / proseso

Kung nais naming malaman kung may mga proseso ng anumang serbisyo o programa na tumatakbo maaari naming gamitin ang script na ito (sa kasong ito napatunayan nito na ang demonyo ng Apache ay tumatakbo):

#!/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

Lumikha ng isang file ng lock

Minsan kailangan nating tiyakin na ang script ay hindi tumatakbo dalawa o higit pang beses nang sabay-sabay. Para sa mga ito maaari naming magamit ang mga file ng lock. Ito ay isang simpleng bersyon ng isang script na nagpapahintulot sa amin na gawin ito:

#!/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

Sa kasong ito, napatunayan na ang file kung anuman.lock mayroon Kung sakaling mayroon ito, HINDI isinasagawa ng script ang mga gawain nito. Kung wala ito, lumilikha ito ng file, pinapatakbo ang mga gawaing kinakailangan nito upang patakbuhin, at aalisin ito. Ngunit, hindi ito ganap na maaasahan. Ano ang mangyayari kung habang tumatakbo ang aming script ay sarado ito bigla?

Sa kasong iyon ang lock file ay hindi matatanggal, at samakatuwid ay hindi ito papayagan na muling patakbuhin ang script. Upang masakop ang mga kaso na iyon, maaari naming magamit ang utos ng bitag na nagbibigay-daan sa amin upang magpatupad ng mga utos kung sakaling hindi magtagpo ang pagtatapos ng aming script. Ito ay isang mas advanced na bersyon na nagse-save din ng PID ng script na nagpapatupad nito sa loob ng lock file:

#!/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

Unawain natin nang kaunti ang utos bitag. Ang syntax nito ay karaniwang ito: signal ng bitag ng utos [signal…]; kung saan ang signal ay ang termination signal na nais mong mahuli. Kung nais mong makita ang isang listahan ng mga magagamit na signal maaari mong patakbuhin ang command kill -l. Para sa nakaraang kaso, ginamit ang mga signal ng INT (kinukuha ang pagwawakas na ginawa ng isang Ctrl + c), MGA TUNTUNIN (pagwawakas na ginawa ng kill command) at EXIT (normal na pagwawakas ng isang script, alinman dahil wala nang mga linya na naisakatuparan o dahil dumating ito sa exit command).

Menu ng mga pagpipilian

Upang makagawa ng isang menu kung saan pinapayagan namin ang gumagamit na pumili ng isang serye ng mga pagpipilian na maaari naming magamit ang sumusunod na pamamaraan:

#!/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

Humingi ng kumpirmasyon bago magpatakbo ng isang script

Minsan kapaki-pakinabang na kumpirmahin ng gumagamit ang pagpapatupad ng isang pangkat ng mga pahayag, iyon ay, ang karaniwang mensahe na humihiling sa gumagamit na mag-type ng oo o hindi. Magagawa natin ito tulad nito:

#!/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"

Katapusan ng artikulo. Mahusay lang 

I-edit: Kailangan mong mag-ingat sa mga puwang at tab, na sa anumang kadahilanan ay hindi lalabas ¬¬


Idagdag bilang ginustong mapagkukunan sa Google