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 ¬¬
Persetan dengan mereka hebat O_O ... ini akan banyak membantu perkara kecil yang saya lakukan di Bash 😀
Skripnya sangat hebat! Sungguh besar sumbangannya, hanya yang saya cari.
PS: Forum tergendala.
Ya, pelayan tempat forum dipasang di luar talian, tidak tahu mengapa ... kami menulis e-mel kepada rakan yang mengurusnya, untuk melihat apa yang dia balas kepada kami 🙂
Greetings.
Oh, mari kita berharap ia tidak serius.
Adakah "sekam" itu juga termasuk dalam Code Ninja? XD
Saya suka kekuatan bash 😉 dan mereka memberitahu saya untuk apa bahasa C itu ... baik, dalam skrip shell terdapat banyak perintah yang biasa.
Terima kasih, saya sangat suka
Pengesahan parameter input sangat berguna. Saya tidak tahu bagaimana membuat menu =)
Hebat…. sekarang saya dapat memberikan "kekerasan" pada naskah saya churros ha
Senang melihat bagaimana kerja rendah hati kami di CodeNinja melayani komuniti linux antarabangsa
Jelas! 🙂
Semuanya adalah untuk menolong dan menyumbang bersama, dan bukan untuk membuat api, bukan? 😉
Skrip proses yang sedang berjalan dapat diperbaiki sedikit dengan meletakkan pilihan untuk memilih proses yang ingin Anda ketahui, ia akan kelihatan seperti ini:
#! / Bin / Bash
gema "Pilih perkhidmatan"
baca PERKHIDMATAN
# PERKHIDMATAN = 'mysql'
sekiranya ps ax | grep -v grep | grep $ SERVICE> / dev / null
kemudian
echo "Servis $ SERVICE sedang berjalan"
lagi
echo "Perkhidmatan $ SERVICE dihentikan"
Saya sangat praktikal dengan skrip anda, tetapi saya mencari skrip khas untuk menyelesaikan masalah yang saya hadapi, seperti berikut: Kami mempunyai pelayan aplikasi di Syarikat yang pengguna dalaman mengaksesnya melalui telnet, dan melaksanakan aplikasi khas yang terhad Untuk lesen, pengguna menyalahgunakan dan membuka lebih dari satu telnet untuk mengambil alih 2 atau lebih lesen, jadi skrip yang saya fikirkan adalah bahawa dengan beberapa kaedah, periksa proses telnet mana yang tidak aktif selama lebih dari 2 jam dan oleh itu hantar ke pid itu, bolehkah anda menolong saya?
Pasang program berikut
bakat pasang autolog
Dan anda mempunyai fail konfigurasi di /etc/autolog.conf
Bagus, kawan, saya boleh mengajukan soalan kepada anda, saya memerlukan skrip shell dengan pilihan dan saya telah berdasarkannya dan ia berfungsi dengan baik, tetapi salah satu pilihannya adalah untuk menghantar e-mel (menggunakan postifix), ia meminta subjek, teks dan penerima di skrin dan apa yang dihantar dan periksa apakah ia dihantar dengan betul, dengan mailq saya dapat melihat barisan dan melihat apakah ia dihantar, tetapi bagaimana cara saya menghantar e-mel melalui perintah menggunakan pemboleh ubah yang menerima subjek, teks dan penerima? 🙁
Escríbeme a mi email (kzkggaara[at]desdelinux[dot]net) para hablar con más calma, te ayudo con mucho gusto 🙂
Terima kasih kawan, anda berjaya!
Helo baik.
Saya telah menemui contoh-contoh yang sangat baik ketika saya memerlukan menu.
Saya sudah berjaya dan tidak berjaya (pada langkah sebelumnya).
Saya mempunyai 247 elemen, yang merujuk kepada domain wilayah yang berbeza.
Apa yang saya perlukan ialah menu dari mana memilih negara:
#! / Bin / Bash
jelas
semasa:
do
gema »Pilih negara untuk dicuba»
gema «1. Afghanistan (AF) »
gema «2. Albania (AL) »
gema «3. Jerman (DE) »
gema «5. Angola (AO) »
gema «6. Anguilla (AI) »
.. dan berterusan sehingga 247
echo -n "Pilih pilihan [1 - 247]"
pilihan membaca
kes $ pilihan dalam
1) echo "ini anda:"; whoami ;;
2) gema "anda mempunyai ini"; df ;;
3) gema ""; uname -r ;;
4) gema "bye"; jalan keluar 1 ;;
5) echo "ini anda:"; whoami ;;
6) echo "ini anda:"; whoami ;;
... Dan berterusan sehingga 247
*) echo «$ opc adalah pilihan yang tidak sah. Begitu sukar? ";
gema "Tekan kekunci untuk meneruskan ...";
baca foo ;;
bahawa C
dilakukan
Kelakuannya adalah seperti berikut:
Apa-apa pilihan kecuali 4, yang merupakan output, menghapus nombor yang dimasukkan dan menunggu nombor baru.
Masuk 4 keluar.
Sekiranya saya meletakkan kod 4 di baris lain (katakanlah 150) ia dikeluarkan sama tanpa masalah.
Saya juga telah mencuba memasukkan kod dalam format ini:
151) gema "ini anda:";
siapakah saya ;;
dengan hasil yang sama.
Saya tertanya-tanya apakah ada pilihan yang lebih baik untuk menu yang panjang dan tentu saja saya juga salah.
Bantuan akan sangat dihargai, terima kasih
sangat baik ... saya rasa sangat bagus untuk masuk ke dalam cengkerang
terima kasih
hei bagaimana saya boleh membuat bash saya berfungsi dengan fail
contoh:
muat naik.sh fotodelavecina.jpg
memikirkan bahawa skrip bash saya "upload.sh" mempunyai maklumat akses ke ftp saya
salam dan terima kasih 😀
Tuan baik, terima kasih banyak untuk semua skrip, saya telah menyediakan pelayan CentOS dan anda tidak tahu sejauh mana templat ini sampai kepada saya, sila hubungi saya melalui e-mel. Saya ingin mencadangkan sesuatu kepada anda
Mengapa anda menggunakan baca foo semasa membuat menu? jawapan pantas yang saya perlukan