เชลล์สคริปต์ที่มีประโยชน์ในโปรแกรมใด ๆ

ทุบตี เป็นโปรแกรมคอมพิวเตอร์ที่มีหน้าที่แปลคำสั่ง มันขึ้นอยู่กับเปลือกของ ยูนิกซ์ และถูกเขียนขึ้นสำหรับโครงการ GNU เป็นเชลล์ดีฟอลต์ในการแจกแจงส่วนใหญ่ของ GNU / Linux. ชื่อของเขาเป็นคำย่อของ บอร์น-อะเกน เชลล์ (อีกเปลือกหนึ่ง)การเล่นคำ (เกิดอีกครั้งหมายถึงการเกิดใหม่) เกี่ยวกับ เปลือกบอร์น (sh)ซึ่งเป็นหนึ่งในล่ามหลักคนแรกของ Unix

วันนี้เราจะแสดงเชลล์สคริปต์ที่มีประโยชน์มากสำหรับนักพัฒนา ส่วนใหญ่ทำงานในเปลือกใด ๆ ยูนิกซ์แม้ว่าบางคนต้องการให้ดำเนินการโดยเฉพาะ ทุบตี.

ป้องกันไม่ให้ผู้ใช้ที่ไม่ได้รับสิทธิพิเศษเรียกใช้สคริปต์

สคริปต์บางตัวดำเนินงานการดูแลระบบดังนั้นเราอาจต้องการให้เฉพาะผู้ใช้ root เท่านั้นที่รันสคริปต์ ในกรณีนี้เราสามารถใช้สิ่งนี้:

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

อนุญาตให้เรียกใช้สคริปต์กับผู้ใช้ที่ระบุเท่านั้น

เช่นเดียวกับโค้ดด้านบนเราอาจต้องการให้เฉพาะผู้ใช้ที่ต้องการรันสคริปต์ เราทำเช่นนั้น:

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

ตรวจสอบว่าบริการ / กระบวนการทำงานอยู่

หากเราต้องการทราบว่ามีกระบวนการของบริการหรือโปรแกรมใด ๆ ที่ทำงานอยู่หรือไม่เราสามารถใช้สคริปต์นี้ได้ (ในกรณีนี้เป็นการตรวจสอบว่าปีศาจของ อาปาเช่ กำลังวิ่ง):

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

สร้างไฟล์ล็อค

บางครั้งเราต้องแน่ใจว่าสคริปต์ไม่ได้ทำงานสองครั้งขึ้นไปพร้อมกัน สำหรับสิ่งนี้เราสามารถใช้ประโยชน์จากไฟล์ล็อค นี่เป็นสคริปต์เวอร์ชันง่ายๆที่ให้เราทำสิ่งนี้:

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

ในกรณีนี้จะได้รับการตรวจสอบว่าไฟล์ what.lock มีอยู่ ในกรณีที่มีอยู่สคริปต์จะไม่ดำเนินการตามภารกิจ หากไม่มีอยู่ระบบจะสร้างไฟล์เรียกใช้งานที่ต้องรันและลบออก แต่ไม่น่าเชื่อถือทั้งหมด จะเกิดอะไรขึ้นถ้าในขณะที่สคริปต์ของเรากำลังทำงานอยู่มันถูกปิดทันที

ในกรณีนี้ไฟล์ล็อกจะไม่ถูกลบดังนั้นจึงไม่อนุญาตให้เราเรียกใช้สคริปต์อีกครั้ง เพื่อให้ครอบคลุมกรณีเหล่านั้นเราสามารถใช้ประโยชน์จากคำสั่งกับดักที่ช่วยให้เราดำเนินการคำสั่งในกรณีที่สคริปต์ของเราจบลงโดยไม่คาดคิด นี่เป็นเวอร์ชันขั้นสูงกว่าที่บันทึก PID ของสคริปต์ที่เรียกใช้งานภายในไฟล์ล็อก:

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

มาทำความเข้าใจคำสั่งกันหน่อยดีกว่า กับดัก. โดยพื้นฐานแล้วไวยากรณ์ของมันคือ: สัญญาณคำสั่งกับดัก [สัญญาณ ... ]; โดยที่สัญญาณคือสัญญาณบอกเลิกที่คุณต้องการจับ หากคุณต้องการดูรายการสัญญาณที่มีคุณสามารถรันคำสั่ง kill -l สำหรับกรณีก่อนหน้านี้ใช้สัญญาณ INT (จับการสิ้นสุดที่สร้างโดย Ctrl + c), ระยะเวลา (การยุติผลิตโดยคำสั่ง kill) และออก (การยุติสคริปต์ตามปกติไม่ว่าจะเป็นเพราะไม่มีบรรทัดให้ดำเนินการอีกต่อไปหรือเพราะเจอคำสั่ง exit).

เมนูตัวเลือก

ในการสร้างเมนูที่เราอนุญาตให้ผู้ใช้เลือกชุดตัวเลือกเราสามารถใช้โครงร่างต่อไปนี้:

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

ขอการยืนยันก่อนเรียกใช้สคริปต์

บางครั้งการให้ผู้ใช้ยืนยันการดำเนินการของชุดคำสั่งนั่นคือข้อความทั่วไปที่ขอให้ผู้ใช้พิมพ์ yes or no เราสามารถทำได้ดังนี้:

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

ท้ายบทความ. เยี่ยมมาก

แก้ไข: คุณต้องระมัดระวังกับการเว้นวรรคและแท็บซึ่งด้วยเหตุผลบางประการจึงไม่ออกมา¬¬


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google