ຖ້າທ່ານຕ້ອງການ, prompts ສາມາດປະຕິບັດ shell scripts ແລະປະຕິບັດຕົວທີ່ແຕກຕ່າງກັນພາຍໃຕ້ເງື່ອນໄຂທີ່ແຕກຕ່າງກັນ. ເຈົ້າສາມາດເປີດສຽງໄດ້ທຸກຄັ້ງທີ່ທ່ານອອກຄຳສັ່ງ, ເຖິງແມ່ນວ່າມັນຈະໜ້າເບື່ອໃນໄວໆນີ້. ຂໍ້ມູນເພີ່ມເຕີມສາມາດພົບໄດ້ໃນ Bash-Prompt HOWTO.
![]()
7.2.5. ສະຄຣິບ Shell
7.2.5.1. ອັກສອນແມ່ນຫຍັງ?
Shell script ແມ່ນ, ດັ່ງທີ່ພວກເຮົາໄດ້ເຫັນໃນຕົວຢ່າງການຕັ້ງຄ່າ shell, ໄຟລ໌ຂໍ້ຄວາມທີ່ມີຄໍາສັ່ງ shell. ເມື່ອໄຟລ໌ດັ່ງກ່າວຖືກໃຊ້ເປັນການໂຕ້ຖຽງທີ່ບໍ່ແມ່ນທາງເລືອກທໍາອິດເມື່ອເອີ້ນ Bash, ແລະບໍ່ແມ່ນການໂຕ້ຖຽງ. -c neither -s ທາງເລືອກແມ່ນສະຫນອງໃຫ້, Bash ອ່ານແລະປະຕິບັດຄໍາສັ່ງຈາກໄຟລ໌, ຫຼັງຈາກນັ້ນອອກ. ຮູບແບບການດໍາເນີນການນີ້ສ້າງ a
ແກະທີ່ບໍ່ມີການໂຕ້ຕອບ. ເມື່ອ Bash ແລ່ນ Shell script, ມັນກໍານົດພາລາມິເຕີພິເສດ 0 ກັບຊື່ຂອງໄຟລ໌, ແທນທີ່ຈະເປັນຊື່ຂອງແກະ, ແລະຕົວກໍານົດການຕໍາແຫນ່ງ (ທຸກສິ່ງທຸກຢ່າງຕາມຊື່ຂອງສະຄິບ) ຖືກກໍານົດເປັນ arguments ທີ່ຍັງເຫຼືອ, ຖ້າມີໃຫ້. ຖ້າບໍ່ມີການສະຫນອງການໂຕ້ຖຽງເພີ່ມເຕີມ, ຕົວກໍານົດການຕໍາແຫນ່ງແມ່ນບໍ່ໄດ້ຕັ້ງ.
Shell script ອາດຈະຖືກເຮັດໃຫ້ສາມາດປະຕິບັດໄດ້ໂດຍການໃຊ້ chmod ຄໍາສັ່ງທີ່ຈະເປີດໃຊ້ bit ປະຕິບັດ. ເມື່ອ Bash ຊອກຫາໄຟລ໌ດັ່ງກ່າວໃນຂະນະທີ່ຊອກຫາ PATH ສໍາລັບຄໍາສັ່ງ, ມັນ spawns sub-shell ເພື່ອປະຕິບັດມັນ. ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ການປະຕິບັດ
ຊື່ເອກະສານ ການໂຕ້ຖຽງ
ເທົ່າກັບການປະຕິບັດ
bash ຊື່ໄຟລ໌ ARGUMENTS
ຖ້າ "filename" ເປັນ script shell ທີ່ສາມາດປະຕິບັດໄດ້. ເປືອກຍ່ອຍນີ້ reinitializes ຕົວຂອງມັນເອງ, ດັ່ງນັ້ນຜົນກະທົບແມ່ນຄືກັບວ່າແກະໃຫມ່ໄດ້ຖືກເອີ້ນໃຫ້ຕີຄວາມຫມາຍຂອງສະຄິບ, ຍົກເວັ້ນສະຖານທີ່ຂອງຄໍາສັ່ງທີ່ຈື່ໄວ້ໂດຍພໍ່ແມ່ (ເບິ່ງ. hash ໃນຫນ້າຂໍ້ມູນ) ແມ່ນຖືກເກັບຮັກສາໄວ້ໂດຍເດັກ.
ຮຸ່ນສ່ວນໃຫຍ່ຂອງ UNIX ເຮັດໃຫ້ມັນເປັນສ່ວນຫນຶ່ງຂອງກົນໄກການປະຕິບັດຄໍາສັ່ງຂອງລະບົບປະຕິບັດການ. ຖ້າແຖວທໍາອິດຂອງສະຄຣິບເລີ່ມຕົ້ນດ້ວຍສອງຕົວອັກສອນ "#!", ສ່ວນທີ່ເຫຼືອຂອງແຖວຈະລະບຸຕົວແປສໍາລັບໂປຣແກຣມ. ດັ່ງນັ້ນ, ທ່ານສາມາດກໍານົດ bash, ງຸ່ມ, perl ຫຼືບາງນາຍແປພາສາຫຼືແກະອື່ນແລະຂຽນສ່ວນທີ່ເຫຼືອຂອງໄຟລ໌ script ໃນພາສານັ້ນ.
ການໂຕ້ຖຽງກັບນາຍພາສາປະກອບດ້ວຍການໂຕ້ຖຽງທາງເລືອກດຽວທີ່ປະຕິບັດຕາມຊື່ນາຍພາສາໃນແຖວທໍາອິດຂອງໄຟລ໌ສະຄິບ, ຕິດຕາມດ້ວຍຊື່ຂອງໄຟລ໌ສະຄິບ, ປະຕິບັດຕາມການໂຕ້ຖຽງສ່ວນທີ່ເຫຼືອ. Bash ຈະດໍາເນີນການນີ້ໃນລະບົບປະຕິບັດການທີ່ບໍ່ໄດ້ຈັດການກັບມັນເອງ.
Bash scripts ມັກຈະເລີ່ມຕົ້ນດ້ວຍ
#! / bin / bash (ສົມມຸດວ່າ Bash ໄດ້ຖືກຕິດຕັ້ງຢູ່ໃນ / ຖັງ), ເນື່ອງຈາກວ່ານີ້ຮັບປະກັນວ່າ Bash ຈະຖືກນໍາໃຊ້ເພື່ອຕີຄວາມຫມາຍຂອງສະຄິບ, ເຖິງແມ່ນວ່າມັນຖືກປະຕິບັດພາຍໃຕ້ແກະອື່ນ.
![]()
7.2.5.2. ບາງຕົວຢ່າງທີ່ງ່າຍດາຍ
script ທີ່ງ່າຍດາຍຫຼາຍປະກອບດ້ວຍຄໍາສັ່ງດຽວ, ທີ່ເວົ້າວ່າສະບາຍດີກັບຜູ້ໃຊ້ປະຕິບັດມັນ:
[jerry@ nowhere ~] cat hello.sh
#! / bin / bash
ສຽງສະທ້ອນ "ສະບາຍດີ $USER"
[jerry@ nowhere ~] cat hello.sh
#! / bin / bash
ສຽງສະທ້ອນ "ສະບາຍດີ $USER"
script ຕົວຈິງປະກອບດ້ວຍພຽງແຕ່ຫນຶ່ງຄໍາສັ່ງ, echo, ເຊິ່ງໃຊ້ ມູນຄ່າຂອງ ($) ໄດ້ ຜູ້ໃຊ້ ຕົວແປສະພາບແວດລ້ອມເພື່ອພິມສະຕຣິງທີ່ປັບແຕ່ງໃຫ້ກັບຜູ້ໃຊ້ທີ່ອອກຄໍາສັ່ງ.
ອີກແຖວໜຶ່ງ, ໃຊ້ເພື່ອສະແດງຜູ້ໃຊ້ທີ່ເຊື່ອມຕໍ່:
#! / bin / bash
ໃຜ | ຕັດ -d " " -f 1 | ຄັດ -u
#! / bin / bash
ໃຜ | ຕັດ -d " " -f 1 | ຄັດ -u
ນີ້ແມ່ນສະຄຣິບທີ່ປະກອບດ້ວຍບາງເສັ້ນເພີ່ມເຕີມ, ທີ່ຂ້ອຍໃຊ້ເພື່ອເຮັດສໍາເນົາສໍາຮອງຂອງໄຟລ໌ທັງຫມົດໃນໄດເລກະທໍລີ. script ທໍາອິດສ້າງບັນຊີລາຍຊື່ຂອງໄຟລ໌ທັງຫມົດໃນໄດເລກະທໍລີປະຈຸບັນແລະວາງໄວ້ໃນຕົວແປ LIST. ຫຼັງຈາກນັ້ນ, ມັນກໍານົດຊື່ຂອງສໍາເນົາສໍາລັບແຕ່ລະໄຟລ໌, ແລະຫຼັງຈາກນັ້ນມັນສໍາເນົາໄຟລ໌. ສໍາລັບແຕ່ລະໄຟລ໌, ຂໍ້ຄວາມຖືກພິມອອກ:
tille:~> cat bin/makebackupfiles.sh
#! / bin / bash
# ເຮັດສຳເນົາຂອງໄຟລ໌ທັງໝົດໃນໄດເລກະທໍລີ LIST=`ls`
ສໍາລັບຂ້ອຍໃນ $LIST; ເຮັດ
ORIG=$i
DEST=$i.old
cp $ORIG $DEST echo "ສຳເນົາ $i"
ເຮັດ
tille:~> cat bin/makebackupfiles.sh
#! / bin / bash
# ເຮັດສຳເນົາຂອງໄຟລ໌ທັງໝົດໃນໄດເລກະທໍລີ LIST=`ls`
ສໍາລັບຂ້ອຍໃນ $LIST; ເຮັດ
ORIG=$i
DEST=$i.old
cp $ORIG $DEST echo "ສຳເນົາ $i"
ເຮັດ
ພຽງແຕ່ເຂົ້າໄປໃນເສັ້ນເຊັ່ນ mv * *.ເກົ່າ ຈະບໍ່ເຮັດວຽກ, ດັ່ງທີ່ທ່ານຈະສັງເກດເຫັນໃນເວລາທີ່ພະຍາຍາມນີ້ຢູ່ໃນຊຸດຂອງໄຟລ໌ການທົດສອບ. ອັນ echo ຄໍາສັ່ງໄດ້ຖືກເພີ່ມເພື່ອສະແດງກິດຈະກໍາບາງຢ່າງ. echo's ໂດຍທົ່ວໄປແມ່ນເປັນປະໂຫຍດເມື່ອ script ຈະບໍ່ເຮັດວຽກ: ໃສ່ຫນຶ່ງຫຼັງຈາກແຕ່ລະຂັ້ນຕອນທີ່ສົງໃສແລະເຈົ້າຈະພົບເຫັນຂໍ້ຜິດພາດໃນເວລາບໍ່ດົນ.
ໄດ້ /etc/rc.d/init.d ໄດເລກະທໍລີປະກອບດ້ວຍຕົວຢ່າງຈໍານວນຫລາຍ. ລອງເບິ່ງສະຄຣິບນີ້ທີ່ຄວບຄຸມເຊີບເວີ ICanSeeYou ທີ່ສົມຈິງ:
#! / bin / sh
# ລາຍລະອຽດ: ICanSeeYou ຊ່ວຍໃຫ້ທ່ານເຫັນຄົນທີ່ມີເຄືອຂ່າຍ
# ຊື່ຂະບວນການ: ICanSeeYou
# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid
# config: /etc/ICanSeeYou.cfg
# ຫ້ອງສະຫມຸດຟັງຊັນແຫຼ່ງ.
. /etc/rc.d/init.d/functions
# ເບິ່ງວິທີການ (ທີ່ມີການໂຕ້ຖຽງ) ພວກເຮົາຖືກເອີ້ນ. ກໍລະນີ "$1" ໃນ
ເລີ່ມຕົ້ນ)
echo -n "ເລີ່ມ ICanSeeYou:" daemon ICanSeeYou
echo
ແຕະ /var/lock/subsys/ICanSeeYou
;;
ຢຸດ)
echo -n "ການປິດ ICanSeeYou:"
#! / bin / sh
# ລາຍລະອຽດ: ICanSeeYou ຊ່ວຍໃຫ້ທ່ານເຫັນຄົນທີ່ມີເຄືອຂ່າຍ
# ຊື່ຂະບວນການ: ICanSeeYou
# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid
# config: /etc/ICanSeeYou.cfg
# ຫ້ອງສະຫມຸດຟັງຊັນແຫຼ່ງ.
. /etc/rc.d/init.d/functions
# ເບິ່ງວິທີການ (ທີ່ມີການໂຕ້ຖຽງ) ພວກເຮົາຖືກເອີ້ນ. ກໍລະນີ "$1" ໃນ
ເລີ່ມຕົ້ນ)
echo -n "ເລີ່ມ ICanSeeYou:" daemon ICanSeeYou
echo
ແຕະ /var/lock/subsys/ICanSeeYou
;;
ຢຸດ)
echo -n "ການປິດ ICanSeeYou:"
killproc ICanSeeYou echo
rm -f /var/lock/subsys/ICanSeeYou
rm -f /var/run/ICanSeeYou/ICanSeeYou.pid
;;
ສະຖານະພາບ)
ສະຖານະ ICanSeeYou
;;
ເລີ່ມຕົ້ນໃຫມ່)
$0 ຢຸດ
$0 ເລີ່ມຕົ້ນ
;;
*)
echo "ການນຳໃຊ້: $0 {start|stop|restart|status}" ອອກ 1
ວ່າ C
ທາງອອກ 0
killproc ICanSeeYou echo
rm -f /var/lock/subsys/ICanSeeYou
rm -f /var/run/ICanSeeYou/ICanSeeYou.pid
;;
ສະຖານະພາບ)
ສະຖານະ ICanSeeYou
;;
ເລີ່ມຕົ້ນໃຫມ່)
$0 ຢຸດ
$0 ເລີ່ມຕົ້ນ
;;
*)
echo "ການນຳໃຊ້: $0 {start|stop|restart|status}" ອອກ 1
ວ່າ C
ທາງອອກ 0
ຫນ້າທໍາອິດ, ກັບ . command (dot) ຊຸດຂອງຟັງຊັນ shell, ຖືກນໍາໃຊ້ໂດຍເກືອບທັງຫມົດ shell scripts ໃນ
/etc/rc.d/init.d, ຖືກໂຫລດ. ຈາກນັ້ນ ກ ກໍລະນີ ຄໍາສັ່ງຖືກອອກ, ເຊິ່ງກໍານົດ 4 ວິທີທີ່ແຕກຕ່າງກັນທີ່ script ສາມາດປະຕິບັດ. ຕົວຢ່າງອາດຈະເປັນ ຂ້ອຍສາມາດເຫັນເຈົ້າ ການເລີ່ມຕົ້ນ. ການຕັດສິນໃຈຂອງກໍລະນີທີ່ຈະນໍາໃຊ້ແມ່ນເຮັດໄດ້ໂດຍການອ່ານ (ທໍາອິດ) ການໂຕ້ຖຽງກັບ script ໄດ້, ມີສໍານວນ. $1.
ເມື່ອບໍ່ມີການປ້ອນຂໍ້ມູນເຂົ້າກັນໄດ້, ກໍລະນີເລີ່ມຕົ້ນ, ທີ່ໝາຍດ້ວຍເຄື່ອງໝາຍດາວ, ຖືກນຳໃຊ້, ເຊິ່ງສະຄຣິບໃຫ້ຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດ. ໄດ້ ກໍລະນີ ບັນຊີລາຍຊື່ແມ່ນສິ້ນສຸດລົງດ້ວຍ ວ່າ C ຖະແຫຼງການ. ໃນ ການເລີ່ມຕົ້ນ ກໍລະນີທີ່ໂຄງການເຄື່ອງແມ່ຂ່າຍແມ່ນໄດ້ເລີ່ມຕົ້ນເປັນ daemon, ແລະ ID ຂະບວນການແລະການລັອກແມ່ນໄດ້ຮັບມອບຫມາຍ. ໃນ ຢຸດ ກໍລະນີ, ຂະບວນການເຄື່ອງແມ່ຂ່າຍແມ່ນ traced ລົງແລະຢຸດເຊົາ, ແລະ lock ແລະ PID ໄດ້ຖືກໂຍກຍ້າຍອອກ. ທາງເລືອກ, ເຊັ່ນ: daemon ທາງເລືອກ, ແລະຫນ້າທີ່ຄ້າຍຄື killproc, ຖືກກໍານົດໄວ້ໃນ /etc/rc.d/init.d/functions ໄຟລ໌. ການຕັ້ງຄ່ານີ້ແມ່ນສະເພາະກັບການແຈກຢາຍທີ່ໃຊ້ໃນຕົວຢ່າງນີ້. initscripts ໃນລະບົບຂອງທ່ານອາດຈະໃຊ້ຟັງຊັນອື່ນ, ກໍານົດຢູ່ໃນໄຟລ໌ອື່ນໆ, ຫຼືບໍ່ມີທັງຫມົດ.
ເມື່ອສຳເລັດ, ສະຄຣິບຈະສົ່ງຄືນລະຫັດອອກຂອງສູນໃຫ້ກັບພໍ່ແມ່ຂອງມັນ.
ສະຄຣິບນີ້ເປັນຕົວຢ່າງທີ່ດີຂອງການໃຊ້ຟັງຊັນຕ່າງໆ, ເຊິ່ງເຮັດໃຫ້ສະຄຣິບອ່ານງ່າຍຂຶ້ນ ແລະເຮັດວຽກໄດ້ໄວຂຶ້ນ. ໃຫ້ສັງເກດວ່າພວກເຂົາໃຊ້ sh ແທນທີ່ bash, ເພື່ອເຮັດໃຫ້ພວກມັນເປັນປະໂຫຍດໃນລະບົບທີ່ກວ້າງຂວາງ. ໃນລະບົບ Linux, ໂທຫາ bash as sh ສົ່ງຜົນໃຫ້ Shell ເຮັດວຽກຢູ່ໃນໂໝດ POSIX-compliant.
ເອກະສານ