Skrip shell yang berguna dalam program apa pun

Menampar Ini adalah program komputer yang fungsinya untuk menginterpretasikan pesanan. Ini didasarkan pada cangkang Unix dan ditulis untuk proyek tersebut GNU menjadi shell default di sebagian besar distribusi GNU / Linux. Namanya adalah singkatan dari Bourne-Lagi Shell (shell bourne lain), bermain-main dengan kata-kata (terlahir-kembali berarti kelahiran kembali) pada Cangkang Bourne (sh), yang merupakan salah satu penafsir utama pertama Unix.

Hari ini kami akan menunjukkan beberapa skrip shell yang bisa sangat berguna bagi pengembang. Sebagian besar bekerja di shell apa pun Unix, meskipun beberapa mengharuskan mereka dieksekusi secara khusus oleh Menampar.

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 layanan atau program yang sedang berjalan, kita dapat menggunakan skrip ini (dalam hal ini memverifikasi bahwa iblis dari Apache sedang 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 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, diverifikasi bahwa file tersebut terserah. kunci ada. Jika ada, skrip TIDAK menjalankan tugasnya. Jika tidak ada, itu membuat file, menjalankan tugas yang perlu dijalankan, dan menghapusnya. Tapi, ini tidak sepenuhnya bisa diandalkan. Bagaimana jika saat skrip kita berjalan, itu ditutup secara tiba-tiba?

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 perintahnya sedikit lebih baik perangkap. Sintaksnya pada dasarnya adalah ini: sinyal perintah perangkap [sinyal…]; dimana sinyal adalah sinyal terminasi yang ingin Anda tangkap. Jika Anda ingin melihat daftar sinyal yang tersedia Anda dapat menjalankan perintah kill -l. Untuk kasus sebelumnya, sinyal INT digunakan (menangkap penghentian yang dihasilkan oleh Ctrl + c), JANGKA (penghentian diproduksi oleh perintah kill) dan KELUAR (penghentian normal skrip, baik karena tidak ada lagi baris yang harus dijalankan atau karena perintah keluar).

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: Anda harus berhati-hati dengan spasi dan tab, yang karena alasan tertentu tidak keluar ¬


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   KZKG ^ Gaara dijo

    Sial, mereka hebat O_O ... itu akan banyak membantu hal-hal kecil yang saya lakukan di Bash 😀

  2.   ren434 dijo

    Naskahnya super! Sungguh kontribusi yang besar, sungguh, persis seperti yang saya cari.

    PS: Forumnya down.

    1.    KZKG ^ Gaara dijo

      Ya, server tempat forum dipasang sedang offline, tidak tahu mengapa ... kami menulis email ke teman yang menangani itu, untuk melihat apa yang dia tanggapi kepada kami 🙂

      Salam.

  3.   ren434 dijo

    Baiklah, semoga tidak ada yang serius.

  4.   kidal dijo

    Apakah "sekam" itu juga termasuk dalam Code Ninja? XD

  5.   targon dijo

    Saya suka kekuatan bash 😉 dan mereka memberi tahu saya untuk apa bahasa C itu…, karena dalam skrip shell ada banyak perintah yang sudah dikenal.

  6.   Christopher dijo

    Terima kasih, saya sangat suka

  7.   bidadari dijo

    Validasi parameter masukan sangat berguna. Saya tidak tahu cara membuat menu =)

  8.   Hyuuga_Neji dijo

    Bagus…. sekarang saya bisa memberikan beberapa "kekerasan" pada churros skrip saya lol

  9.   gagak dijo

    Sangat senang melihat bagaimana pekerjaan sederhana kami di CodeNinja melayani komunitas linux internasional

    1.    KZKG ^ Gaara dijo

      Bersih! 🙂
      Semuanya untuk membantu dan berkontribusi bersama, dan bukan untuk menciptakan api, bukan? 😉

  10.   diego dijo

    Skrip proses yang sedang berjalan dapat ditingkatkan sedikit dengan meletakkan opsi untuk memilih proses yang ingin Anda ketahui, akan terlihat seperti ini:

    #! / bin / bash
    echo "Pilih layanan"
    baca SERVICE
    # SERVICE = 'mysql'
    jika ps ax | grep -v grep | grep $ SERVICE> / dev / null
    kemudian
    echo "layanan $ SERVICE sedang berjalan"
    lain
    echo "layanan $ SERVICE dihentikan"

  11.   Jua Carlos C. dijo

    Saya memiliki skrip yang sangat praktis, tetapi saya mencari skrip khusus untuk memecahkan masalah yang saya miliki, yaitu sebagai berikut: Kami memiliki server aplikasi di Perusahaan yang diakses oleh pengguna internal melalui telnet, dan menjalankan aplikasi khusus yaitu terbatas Untuk lisensi, pengguna menyalahgunakan dan membuka lebih dari satu telnet untuk mengambil alih 2 atau lebih lisensi, jadi skrip yang saya pikirkan adalah dengan beberapa metode, periksa proses telnet mana yang tidak aktif selama lebih dari 2 jam dan oleh karena itu kirim kill ke sana pid, bisa bantu saya?

    1.    diego dijo

      Instal program berikut

      aptitude menginstal autolog

      Dan Anda memiliki file konfigurasi di /etc/autolog.conf

  12.   Tito dijo

    Hebat, teman, saya dapat mengajukan pertanyaan kepada Anda, saya memerlukan skrip shell dengan opsi dan saya telah mendasarkannya pada Anda dan berfungsi dengan baik, tetapi salah satu opsi harus mengirim email (menggunakan postifix), itu menanyakan subjek, teks dan penerima di layar dan apa yang mengirim dan memeriksa bahwa itu dikirim dengan benar, dengan mailq saya dapat melihat antrian dan melihat apakah itu dikirim, tetapi bagaimana cara mengirim surat dengan perintah menggunakan variabel yang menerima subjek, teks dan penerima ? 🙁

    1.    KZKG ^ Gaara dijo

      Tulis ke email saya (kzkggaara[at]desdelinux[dot]net) untuk berbicara lebih tenang, saya akan dengan senang hati membantu Anda :)

      1.    Tito dijo

        Terima kasih banyak, teman, Anda lulus!

  13.   Fer dijo

    Halo baik.
    Saya telah menemukan contoh yang sangat baik ini tepat ketika saya membutuhkan menu.
    Saya telah memulainya dan tidak dapat membuatnya berfungsi (di langkah sebelumnya).
    Saya memiliki 247 elemen, yang mengacu pada domain teritorial yang berbeda.
    Yang saya butuhkan adalah menu untuk memilih negara:
    #! / bin / bash
    jelas
    sementara:
    do
    echo »Pilih negara untuk mencoba»
    echo «1. Afghanistan (AF) »
    echo «2. Albania (AL) »
    echo «3. Jerman (DE) »
    echo «5. Angola (AO) »
    echo «6. Anguilla (AI) »
    .. dan berlanjut sampai 247

    echo -n "Pilih satu opsi [1 - 247]"
    opsi baca
    case $ option in
    1) echo "ini adalah kamu:"; whoami ;;
    2) echo "Anda memiliki ini"; df ;;
    3) echo ""; uname -r ;;
    4) echo "bye"; exit 1 ;;
    5) echo "ini adalah kamu:"; whoami ;;
    6) echo "ini adalah kamu:"; whoami ;;
    … Dan berlanjut sampai 247
    *) echo «$ opc adalah opsi yang tidak valid. Ini sangat sulit? ";
    echo "Tekan salah satu tombol untuk melanjutkan ...";
    baca foo ;;
    esac
    dilakukan

    Perilakunya adalah sebagai berikut:
    Opsi apa pun kecuali 4, yang merupakan output, menghapus nomor yang dimasukkan dan menunggu nomor baru.
    Memasukkan 4 keluar.
    Jika saya meletakkan kode 4 di baris lain (katakanlah 150) hasilnya sama tanpa masalah.
    Saya juga mencoba memasukkan kode dalam format ini:
    151) gema "ini kamu:";
    siapa saya ;;
    dengan hasil yang sama.
    Saya ingin tahu apakah ada pilihan yang lebih baik untuk menu yang begitu panjang dan tentu saja saya juga melakukan kesalahan.
    Bantuan akan sangat kami hargai, terima kasih

  14.   Hanya Raul dijo

    luar biasa ... Saya pikir sangat baik untuk masuk ke shell

    terima kasih

  15.   marcos dijo

    bagus, hei bagaimana cara membuat bash saya berfungsi dengan file
    contoh:

    unggah.sh fotodelavecina.jpg

    berpikir bahwa skrip bash saya "upload.sh" memiliki informasi akses ke ftp saya

    salam dan terima kasih 😀

  16.   netzulo ntx dijo

    Sobat, terima kasih banyak untuk semua skrip, saya telah menyiapkan server CentOS dan Anda tidak tahu seberapa baik templat ini datang kepada saya, silakan hubungi saya melalui email. Saya ingin mengusulkan sesuatu kepada Anda

  17.   gabriel balderramos dijo

    Mengapa Anda menggunakan read foo saat membuat menu? jawaban cepat yang saya butuhkan