Skrip shell berguna dalam mana-mana program

Bash Ini adalah program komputer yang fungsinya adalah untuk mentafsirkan pesanan. Ia berdasarkan cengkerang Unix dan ditulis untuk projek itu GNU menjadi shell lalai dalam sebilangan besar pengedaran GNU / Linux. Namanya adalah singkatan dari Bourne–Again Shell (cengkerang lain), mempermainkan kata-kata (dilahirkan semula bermaksud kelahiran semula) pada Cangkang Bourne (sh), yang merupakan salah satu penafsir utama Unix pertama.

Hari ini kita akan menunjukkan beberapa skrip shell yang sangat berguna untuk pembangun. Sebilangan besar bekerja di cangkang mana pun Unix, walaupun ada yang mengharuskan mereka dilaksanakan secara khusus oleh Bash.

Cegah pengguna yang tidak berhak menjalankan skrip

Beberapa skrip menjalankan tugas pentadbiran, jadi kami mungkin hanya mahu pengguna root menjalankan skrip. Sekiranya kita dapat menggunakan sesuatu seperti ini:

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

Benarkan pelaksanaan skrip hanya untuk pengguna tertentu

Sama seperti kod di atas, kami mungkin hanya mahu pengguna tertentu menjalankan skrip. Kami melakukannya:

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

Sahkan bahawa perkhidmatan / proses sedang berjalan

Sekiranya kita ingin mengetahui apakah ada proses perkhidmatan atau program yang berjalan, kita dapat menggunakan skrip ini (dalam kes ini ia mengesahkan bahawa iblis dari Apache adalah berlari):

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

Buat fail kunci

Kadang-kadang kita harus memastikan bahawa skrip tidak berjalan dua atau lebih kali secara serentak. Untuk ini kita boleh menggunakan fail kunci. Ini adalah versi skrip ringkas yang membolehkan kami melakukan ini:

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

Dalam kes ini, disahkan bahawa fail tersebut apa sahaja.kunci ada. Sekiranya ada, skrip TIDAK menjalankan tugasnya. Sekiranya tidak ada, ia akan membuat fail, menjalankan tugas yang perlu dijalankan, dan menghapusnya. Tetapi, ini tidak boleh dipercayai sepenuhnya. Apa yang akan berlaku sekiranya semasa skrip kami berjalan ia ditutup secara tiba-tiba?

Sekiranya fail kunci tidak akan dihapus, dan oleh itu ia tidak membenarkan kita menjalankan skrip lagi. Untuk menutup kes-kes tersebut, kita dapat memanfaatkan perintah perangkap yang memungkinkan kita untuk melaksanakan perintah sekiranya skrip kita berakhir tanpa diduga. Ini adalah versi yang lebih maju yang juga menyimpan PID skrip yang melaksanakannya dalam fail kunci:

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

Mari kita memahami arahannya sedikit lebih baik perangkap. Sintaksnya pada dasarnya adalah: perangkap arahan arahan [signal…]; di mana isyarat adalah isyarat penamatan yang ingin anda tangkap. Sekiranya anda ingin melihat senarai isyarat yang ada, anda boleh menjalankan perintah kill -l. Untuk kes sebelumnya, isyarat INT telah digunakan (menangkap penamatan yang dihasilkan oleh Ctrl + c), JANGKA MASA (penamatan yang dihasilkan oleh perintah kill) dan KELUAR (Penghentian skrip normal, baik kerana tidak ada lagi baris yang harus dilaksanakan atau karena terdapat perintah keluar).

Menu pilihan

Untuk membuat menu di mana kita membenarkan pengguna memilih rangkaian pilihan, kita boleh menggunakan skema berikut:

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

Minta pengesahan sebelum menjalankan skrip

Kadang-kadang berguna untuk pengguna mengesahkan pelaksanaan sekumpulan pernyataan, iaitu, pesan khas yang meminta pengguna untuk mengetik ya atau tidak. Kita boleh melakukannya seperti ini:

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

Akhir artikel. Cukup hebat 

Edit: Anda harus berhati-hati dengan ruang dan tab, yang untuk beberapa sebab tidak keluar ¬¬