ໜ້າ ທີ່ເຂົ້າໃຈແລະຂຽນໃນ Shell Scripts - ພາກທີ VI
ໜ້າ ທີ່ມີບົດບາດ ສຳ ຄັນໃນພາສາການຂຽນໂປແກຼມໃດໆ. ເຊັ່ນດຽວກັນກັບຫລາຍພາສາການຂຽນໂປແກຼມທີ່ແທ້ຈິງ, bash ມີຫນ້າທີ່ທີ່ຖືກນໍາໃຊ້ກັບການປະຕິບັດທີ່ຈໍາກັດ.
ໜ້າ ທີ່ມີຫຍັງແດ່?
ໃນການຂຽນໂປແກຼມ, ໜ້າ ທີ່ແມ່ນຊື່ພາກສ່ວນຂອງໂປແກຼມທີ່ເຮັດ ໜ້າ ທີ່ສະເພາະໃດ ໜຶ່ງ. ໃນຄວາມ ໝາຍ ນີ້, ໜ້າ ທີ່ແມ່ນປະເພດຂອງຂັ້ນຕອນຫລືແບບປົກກະຕິ. ເມື່ອ ໜ້າ ທີ່ເອີ້ນວ່າໂປຣແກຣມອອກຈາກສ່ວນຂອງລະຫັດປັດຈຸບັນແລະເລີ່ມປະຕິບັດສາຍ ທຳ ອິດພາຍໃນ ໜ້າ ທີ່. ເມື່ອໃດກໍ່ຕາມທີ່ມີລະຫັດຊໍ້າຊາກຫຼືເມື່ອວຽກໃດ ໜຶ່ງ ເຮັດຊ້ ຳ ອີກ, ພິຈາລະນາໃຊ້ ໜ້າ ທີ່ແທນ.
ຍົກຕົວຢ່າງ, ພິຈາລະນາກໍລະນີທີ່ພວກເຮົາຕ້ອງການຄົ້ນຫາຄວາມຈິງຂອງເລກຢູ່ໃນຫຼາຍໆໄລຍະຂອງໂຄງການສະເພາະໃດ ໜຶ່ງ. ແທນທີ່ຈະຂຽນລະຫັດທັງ ໝົດ (ສຳ ລັບການຄິດໄລ່ຄວາມຈິງ) ແຕ່ລະຄັ້ງແລະທຸກໆຄັ້ງ, ພວກເຮົາສາມາດຂຽນສ່ວນ ໜຶ່ງ ຂອງລະຫັດທີ່ຄິດໄລ່ຂໍ້ມູນຄວາມຈິງຄັ້ງ ໜຶ່ງ ພາຍໃນທ່ອນໄມ້ແລະ ນຳ ໃຊ້ອີກຄັ້ງໃນຫຼາຍໆຄັ້ງ.
<
syntax ທົ່ວໄປ ສຳ ລັບການຂຽນ ໜ້າ ທີ່ໃນ script shell ລວມມີວິທີດັ່ງຕໍ່ໄປນີ້.
function func_name { . . . commands . . . } or func_name ( ) { . . . commands . . . } Opening curly braces can also be used in the second line as well. func_name ( ) { . . . commands . . . }
ທ່ານມີອິດສະຫຼະໃນການຂຽນ ຄຳ ສັ່ງທີ່ຖືກຕ້ອງພາຍໃນທ່ອນ ໜ້າ ທີ່ດັ່ງທີ່ພວກເຮົາເຮັດເປັນປົກກະຕິໃນສະຄຣິບແກະ ບັດນີ້ລອງມາຂຽນສະຄິບ ທຳ ມະດາທີ່ມີ ໜ້າ ທີ່ນ້ອຍຢູ່ໃນນັ້ນ.
#!/bin/bash call_echo ( ) { echo ‘This is inside function’ } op=$1 if [ $# -ne 1 ]; then echo "Usage: $0 <1/0>" else if [ $1 = 0 ] ; then echo ‘This is outside function’ elif [ $1 = 1 ] ; then call_echo else echo ‘Invalid argument’ fi fi exit 0
ຄຳ ນິຍາມຂອງ ໜ້າ ທີ່ຕ້ອງມີກ່ອນການໂທຄັ້ງ ທຳ ອິດ. ບໍ່ມີຫຍັງຄ້າຍຄືກັບ“ ປະກາດ ໜ້າ ທີ່ ’ກ່ອນທີ່ຈະໂທຫາ. ແລະພວກເຮົາສະເຫມີສາມາດຮັງຫນ້າທີ່ພາຍໃນຫນ້າທີ່.
ໝາຍ ເຫດ: - ການຂຽນ ໜ້າ ທີ່ຫວ່າງເປົ່າຈະເຮັດໃຫ້ເກີດຂໍ້ຜິດພາດຂອງ syntax ສະ ເໝີ ໄປ.
ເມື່ອ ໜ້າ ທີ່ດຽວກັນຖືກ ກຳ ນົດຫຼາຍຄັ້ງ, ສະບັບສຸດທ້າຍແມ່ນສິ່ງທີ່ຖືກຮຽກຮ້ອງ. ໃຫ້ຍົກຕົວຢ່າງ.
#!/bin/bash func_same ( ) { echo ‘First definition’ } func_same ( ) { echo ‘Second definition’ } func_same exit 0
ໃຫ້ມີຄວາມເລິກເຊິ່ງໂດຍການພິຈາລະນາ ໜ້າ ທີ່ທີ່ເອົາພາລາມິເຕີແລະຄ່າກັບຄືນມາ. ເພື່ອກັບຄືນຄ່າຈາກການ ທຳ ງານຂອງພວກເຮົາພວກເຮົາໃຊ້ຫອຍທີ່ສ້າງແລ້ວ. Syntax ແມ່ນດັ່ງຕໍ່ໄປນີ້.
func_name ( ) { . . . commands . . . return $ret_val }
ເຊັ່ນດຽວກັນພວກເຮົາສາມາດສົ່ງຂໍ້ໂຕ້ແຍ້ງກັບ ໜ້າ ທີ່ທີ່ແຍກອອກຈາກສະຖານທີ່ດັ່ງລຸ່ມນີ້.
func_name $arg_1 $arg_2 $arg_3
ພາຍໃນ ໜ້າ ທີ່ພວກເຮົາສາມາດເຂົ້າເຖິງການໂຕ້ຖຽງກັນເປັນລະບຽບເປັນ $1, $2, $3 ແລະອື່ນໆ. ຊອກຫາຢູ່ໃນຕົວອັກສອນຕົວຢ່າງຕໍ່ໄປນີ້ເພື່ອຊອກຫາຕົວເລກສູງສຸດຂອງສອງຕົວເລກທີ່ໃຊ້ຟັງຊັນເພື່ອເພີ່ມຄວາມຊັດເຈນຕື່ມ.
#!/bin/bash USG_ERR=7 max_two ( ) { if [ "$1" -eq "$2" ] ; then echo 'Equal' exit 0 elif [ "$1" -gt "$2" ] ; then echo $1 else echo $2 fi } err_str ( ) { echo "Usage: $0 <number1> <number2>" exit $USG_ERR } NUM_1=$1 NUM_2=$2 x if [ $# -ne 2 ] ; then err_str elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then max_two $NUM_1 $NUM_2 else err_str fi else err_str fi exit 0
ສິ່ງທີ່ກ່າວມາຂ້າງເທິງນັ້ນເບິ່ງຄືວ່າສັບສົນຫລາຍ, ແຕ່ມັນງ່າຍດາຍຖ້າພວກເຮົາອ່ານຜ່ານສາຍ. ຮັງກ່ອນຖ້າອື່ນຖ້າສາຍ ສຳ ລັບຈຸດປະສົງການ ນຳ ໃຊ້ທີ່ຖືກຕ້ອງ, ເພື່ອກວດເບິ່ງ ຈຳ ນວນແລະປະເພດຂອງການໂຕ້ຖຽງໂດຍການຊ່ວຍເຫຼືອຂອງ ສຳ ນວນປົກກະຕິ. ຫລັງຈາກນັ້ນພວກເຮົາເອີ້ນຟັງຊັນທີ່ມີສອງການໂຕ້ຖຽງເສັ້ນ ຄຳ ສັ່ງແລະສະແດງຜົນໃນນັ້ນເອງ. ນີ້ແມ່ນຍ້ອນວ່າພວກເຮົາບໍ່ສາມາດກັບຄືນເລກເຕັມໂຕຈາກຟັງຊັນໄດ້. ອີກວິທີ ໜຶ່ງ ທີ່ຈະເຮັດວຽກອ້ອມບັນຫານີ້ແມ່ນການໃຊ້ຕົວແປທົ່ວໂລກເພື່ອເກັບຜົນໄດ້ຮັບພາຍໃນ ໜ້າ ທີ່. ບົດຂຽນຂ້າງລຸ່ມນີ້ອະທິບາຍວິທີການນີ້.
#!/bin/bash USG_ERR=7 ret_val= max_two ( ) { if [ "$1" -eq "$2" ] ; then echo 'Equal' exit 0 elif [ "$1" -gt "$2" ] ; then ret_val=$1 else ret_val=$2 fi } err_str ( ) { echo "Usage: $0 <number1> <number2>" exit $USG_ERR } NUM_1=$1 NUM_2=$2 if [ $# -ne 2 ] ; then err_str elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then max_two $NUM_1 $NUM_2 echo $ret_val else err_str fi else err_str fi exit 0
ຕອນນີ້ລອງແກ້ໄຂບັນຫາທີ່ ໜ້າ ຕື່ນເຕັ້ນເຊິ່ງໄດ້ຖືກອະທິບາຍໄວ້ໃນຊຸດສະຄິບແກະກ່ອນ ໜ້າ ນີ້ໂດຍໃຊ້ ໜ້າ ທີ່ດັ່ງຕໍ່ໄປນີ້.
<
ຂ້ອຍຈະໄດ້ຮັບຄວາມເຂົ້າໃຈຕື່ມກ່ຽວກັບຄຸນລັກສະນະທີ່ເປັນປະໂຫຍດເຊັ່ນການໃຊ້ຕົວແປທ້ອງຖິ່ນ, ການຄົ້ນຫາຄືນ ໃໝ່ ແລະອື່ນໆໃນພາກຕໍ່ໄປ. ປັບປຸງໃຫ້ທັນກັບ ຄຳ ເຫັນ.