Skrip shell yang berguna dalam program apa pun

Bash adalah program komputer yang berfungsi untuk menginterpretasikan perintah. Program ini berbasis pada shell Unix dan ditulis untuk proyek GNU , menjadi interpreter perintah default di sebagian besar distribusi GNU/Linux . Namanya merupakan akronim dari Bourne-Again Shell , sebuah permainan kata (born-again berarti kelahiran kembali) yang merujuk pada Bourne shell (sh) , yang merupakan salah satu interpreter Unix utama pertama.

Hari ini kami akan menunjukkan beberapa skrip shell yang sangat berguna bagi pengembang. Sebagian besar skrip ini berfungsi di shell Unix apa pun, meskipun beberapa memerlukan Bash untuk dijalankan secara khusus.

Cegah pengguna yang tidak memiliki hak istimewa untuk menjalankan skrip

Beberapa skrip melakukan tugas administratif jadi kami mungkin hanya menginginkan pengguna root yang menjalankan skrip. Dalam hal ini 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

Izinkan eksekusi skrip hanya untuk pengguna tertentu

Mirip dengan kode di atas, kami mungkin hanya menginginkan pengguna tertentu untuk menjalankan skrip. Kami melakukannya begitu:

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

Verifikasi bahwa layanan / proses sedang berjalan

Jika kita ingin mengetahui apakah ada proses dari suatu layanan atau program yang sedang berjalan, kita dapat menggunakan skrip ini (dalam hal ini, skrip ini memeriksa apakah daemon Apache sedang berjalan) :

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

Terkadang kita harus memastikan bahwa skrip tidak berjalan dua kali atau lebih secara bersamaan. Untuk ini kita dapat menggunakan file kunci. Ini adalah versi skrip sederhana yang memungkinkan kita 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 hal ini, skrip memeriksa apakah file `loquesea.lock` ada. Jika ada, skrip TIDAK menjalankan tugas-tugasnya. Jika tidak ada, skrip akan membuat file tersebut, menjalankan tugas-tugas yang diperlukan, lalu menghapusnya. Namun, ini tidak sepenuhnya dapat diandalkan. Apa yang akan terjadi jika skrip kita tiba-tiba ditutup saat sedang berjalan?

Dalam hal ini file kunci tidak akan dihapus, dan oleh karena itu tidak memungkinkan kita untuk menjalankan skrip lagi. Untuk mengatasi kasus tersebut, kita dapat menggunakan perintah trap yang memungkinkan kita untuk menjalankan perintah jika skrip kita berakhir secara tidak terduga. Ini adalah versi yang lebih maju yang juga menyimpan PID dari skrip yang menjalankannya di dalam file 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 pahami perintah `trap` sedikit lebih baik . Sintaksnya pada dasarnya adalah: `trap command signal [signal …];` di mana `signal` adalah sinyal penghentian yang ingin Anda tangkap. Jika Anda ingin melihat daftar sinyal yang tersedia, Anda dapat menjalankan perintah `kill -l`. Pada contoh sebelumnya, sinyal yang digunakan adalah `INT` (menangkap sinyal penghentian yang dihasilkan oleh Ctrl+c) , `TERM` (penghentian yang dihasilkan oleh perintah `kill`) , dan `EXIT` (penghentian skrip normal, baik karena tidak ada lagi baris yang akan dieksekusi atau karena menemukan perintah `exit`).

Menu opsi

Untuk membuat menu dimana kita memperbolehkan user untuk memilih rangkaian pilihan kita dapat 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 konfirmasi sebelum menjalankan skrip

Kadang-kadang berguna untuk meminta pengguna mengonfirmasi eksekusi sekumpulan pernyataan, yaitu pesan umum yang meminta pengguna untuk mengetik ya atau tidak. Kita bisa melakukan ini 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 bagus 

Edit: Saya perlu lebih berhati-hati dengan spasi dan tab, karena entah kenapa saya belum berhasil menggunakannya dengan benar ¬¬


Tambahkan sebagai sumber pilihan di Google