ໜ້າ ທີ່ເຂົ້າໃຈແລະຂຽນໃນ 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

    ຕອນນີ້ລອງແກ້ໄຂບັນຫາທີ່ ໜ້າ ຕື່ນເຕັ້ນເຊິ່ງໄດ້ຖືກອະທິບາຍໄວ້ໃນຊຸດສະຄິບແກະກ່ອນ ໜ້າ ນີ້ໂດຍໃຊ້ ໜ້າ ທີ່ດັ່ງຕໍ່ໄປນີ້.

    <

  • ເຂົ້າໃຈ ຄຳ ແນະ ນຳ ກ່ຽວກັບການຂຽນພາສາ Linux Shell ຂັ້ນພື້ນຖານ - ສ່ວນທີ I
  • 5 ສະຄິບ Shell ສຳ ລັບ Linux ໃໝ່ ທີ່ຢາກຮຽນຮູ້ການຂຽນໂປແກຼມ Shell - ພາກທີ II
  • ການທ່ອງທ່ຽວທົ່ວໂລກຂອງ Linux BASH Scripting - ພາກທີ III
  • ລັກສະນະຄະນິດສາດຂອງການຂຽນໂປແກມ Linux Shell - ພາກທີ IV
  • ການຄິດໄລ່ການສະແດງອອກທາງຄະນິດສາດໃນພາສາອັກສອນແກະ - ສ່ວນທີ V
  • ຂ້ອຍຈະໄດ້ຮັບຄວາມເຂົ້າໃຈຕື່ມກ່ຽວກັບຄຸນລັກສະນະທີ່ເປັນປະໂຫຍດເຊັ່ນການໃຊ້ຕົວແປທ້ອງຖິ່ນ, ການຄົ້ນຫາຄືນ ໃໝ່ ແລະອື່ນໆໃນພາກຕໍ່ໄປ. ປັບປຸງໃຫ້ທັນກັບ ຄຳ ເຫັນ.