ຄວາມເຂົ້າໃຈຂອງ Linux "ຕົວແປ" ໃນພາສາ Scripting Shell - ພາກທີ 9


ພວກເຮົາໄດ້ຂຽນບົດຂຽນຫຼາຍບົດກ່ຽວກັບ Linux Shell Scripting ເຊິ່ງໄດ້ຮັບການຕ້ອນຮັບຢ່າງອົບອຸ່ນໃນເວລານັ້ນແລະມັນມີຄວາມກ່ຽວຂ້ອງຫຼາຍເຖິງແມ່ນວ່າດຽວນີ້. ນີ້ແມ່ນການເຊື່ອມຕໍ່ກັບການລວບລວມບົດຄວາມກ່ຽວກັບການແກະສະເກັດຫອຍ.

<

  • ຮຽນຮູ້ Linux Shell Scripting
  • ນີ້ຢູ່ໃນບົດຄວາມນີ້ພວກເຮົາຈະເຫັນຕົວແປ, ການປະຕິບັດແລະການຈັດຕັ້ງປະຕິບັດຂອງມັນໃນ shell shell.

    ຜົນຜະລິດຂອງ ຄຳ ສັ່ງສາມາດຖືກໂອນໄປຫາຜົນຜະລິດແບບມາດຕະຖານຫຼືເອກະສານແລະສາມາດເກັບຮັກສາໄວ້ໃນຕົວແປໄດ້ເຊັ່ນກັນ. ຖ້າຜົນຜະລິດຂອງ ຄຳ ສັ່ງມີຂະ ໜາດ ໃຫຍ່ພໍທີ່ມັນບໍ່ ເໝາະ ສົມກັບ ໜ້າ ຈໍທີ່ພວກເຮົາຍັງເຫລືອພຽງແຕ່ມີທາງເລືອກໃນການບັນທຶກຜົນຜະລິດເຂົ້າໃນເອກະສານທີ່ຢູ່ໃນຕົວແປ. ປະໂຫຍດ ໜຶ່ງ ຂອງການປະຫຍັດຜົນຜະລິດໃຫ້ເປັນຕົວປ່ຽນແມ່ນຄວາມໄວໃນການກວດສອບໄວ. ຕົວແປຕ່າງໆຖືກບັນທຶກໄວ້ໃນຄວາມຊົງ ຈຳ ແລະເພາະສະນັ້ນມັນມັກຈະໄວຖ້າປຽບທຽບກັບການດຶງຂໍ້ມູນຈາກແຟ້ມເອກະສານ.

    ຕົວແປແມ່ນສ່ວນປະກອບ ສຳ ຄັນທີ່ໃຊ້ໃນ Shell scripting ແລະຖືກປະກາດໂດຍໃຊ້ ຄຳ ສັ່ງ bash "ປະກາດ". ເພື່ອປະກາດຕົວປ່ຽນແປງເວົ້າວ່າ 'ລະດັບ', ພວກເຮົາ ຈຳ ເປັນຕ້ອງປະຕິບັດ ຄຳ ສັ່ງຕໍ່ໄປນີ້.

    $ declare LEVEL

    ໝາຍ ເຫດ: ພວກເຮົາ ຈຳ ເປັນຕ້ອງໃຊ້“ typecast”, ເຊິ່ງເປັນ ຄຳ ເວົ້າທີ່ສ້າງຂຶ້ນ ສຳ ລັບຄວາມເຂົ້າກັນໄດ້ຂອງ shell korn. ‘ປະກາດ” ແມ່ນມີຄວາມກ້າວ ໜ້າ ແລະມີທຸກຮູບແບບ, ສະນັ້ນແນະ ນຳ ໃຫ້ໃຊ້ໃນເວລາທີ່ໃຊ້ BASH.

    <

  • ຊື່ຕົວແປຕ້ອງມີເຫດຜົນ, ການໃຊ້ຕົວແປໃນຕົວອັກສອນ.
  • ການໃຊ້ຊື່ຕົວແປດຽວກັນຕະຫຼອດໂປແກຼມແມ່ນຖືກແນະ ນຳ ຢ່າງແຂງແຮງ.
  • ຊື່ຕົວແປສາມາດເປັນຕົວອັກສອນໃຫຍ່ແລະຕົວອັກສອນນ້ອຍແຕ່ວ່າໂດຍ ຄຳ ສັ່ງຂອງສົນທິສັນຍາແມ່ນຢູ່ໃນຕົວນ້ອຍແລະເພາະສະນັ້ນພວກເຮົາຄວນໃຊ້ຊື່ຕົວແປໃນຕົວອັກສອນໃຫຍ່, ເພື່ອທີ່ຈະ ກຳ ຈັດຄວາມສັບສົນຕ່າງໆ. ເຊັ່ນ: TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT, ແລະອື່ນໆ
  • ຕົວແປສາມາດຖືກມອບ ໝາຍ ຄ່າໂດຍໃຊ້ເຄື່ອງ ໝາຍ ທີ່ເທົ່າທຽມ (=). ເພື່ອ ກຳ ຫນົດສາຍເຊືອກທີ່ບໍ່ມີຄ່າໃຫ້ຕົວແປໃດ ໜຶ່ງ ພວກເຮົາບໍ່ຕ້ອງສະ ໜອງ ຄ່າໃດໆຫຼັງຈາກມີສັນຍາເທົ່າທຽມກັນ.

    $ LEVEL =

    ກວດສອບມູນຄ່າທີ່ເກັບໄວ້ໃນຕົວປ່ຽນແປງ 'LEVEL' ຄື.

    $ printf "%i" $LEVEL

    printf, ຄຳ ສັ່ງສ່ວນໃຫຍ່ຂອງໂປແກຼມໂປຼແກຼມ ‘C’ ແມ່ນຮູ້, ພິມຂໍ້ມູນ. % i - ສະແດງຕົວເລກລວມ. ພວກເຮົາສາມາດທົດແທນມັນດ້ວຍ% c ສຳ ລັບຕົວອັກສອນຫຼື% c ສຳ ລັບສາຍ, ຕາມຄວາມຕ້ອງການແລະເມື່ອຕ້ອງການ.

    $ລະດັບ: ໝາຍ ເຫດ '$' ທີ່ເຮັດວຽກເປັນຕົວແທນມູນຄ່າ ສຳ ລັບຕົວປ່ຽນແປງ 'ລະດັບ'.

    $ printf "%i" $LEVEL
    0

    ມອບຄ່າໃຫ້ຕົວແປ.

    $ LEVEL=0

    ກວດເບິ່ງຂໍ້ມູນທີ່ເກັບໄວ້ໃນຕົວແປ.

    $ printf "%i" $LEVEL
    0

    ໝາຍ ເຫດ: ມັນເປັນສິ່ງທີ່ ໜ້າ ສົນໃຈທີ່ຈະສັງເກດວ່າທັງສອງກໍລະນີ, ເມື່ອພວກເຮົາບໍ່ໄດ້ມອບ ໝາຍ ຄ່າໃຫ້ຕົວແປແລະເມື່ອພວກເຮົາມອບຄ່າ '0' ໃຫ້ຕົວແປ 'LEVEL' ຜົນໄດ້ຮັບ 0. ເຖິງແມ່ນວ່າຜົນຜະລິດຈະຄືກັນກັບທັງສອງກໍລະນີ ແຕ່ shell shell ຈັດການທັງການປະກາດຕົວປ່ຽນຕ່າງກັນ.

    ມອບຄ່າ ໃໝ່ ໃຫ້ຕົວແປ.

    $ LEVEL=121

    ກວດເບິ່ງຂໍ້ມູນທີ່ເກັບໄວ້ໃນຕົວແປ.

    $ printf "%i" $LEVEL
    121

    ປະກາດແມ່ນ ຄຳ ສັ່ງ BASH ແລະມັນສ້າງຕົວແປໄດ້ພຽງແຕ່ເມື່ອປະຕິບັດ. ຕົວປ່ຽນແປງທີ່ຖືກສ້າງຂື້ນນັ້ນຍັງຄົງຢູ່ໃນຄວາມຊົງ ຈຳ ຈົນກ່ວາສະຄິບຢຸດຫລືຕົວແປຖືກ ທຳ ລາຍ.

    $ unset LEVEL

    BASH ມີຫລາຍກວ່າ 50 ຕົວແປທີ່ ກຳ ນົດໄວ້. ບາງຕົວແປເຫຼົ່ານີ້ມີຄວາມ ໝາຍ ພິເສດຕິດກັບ BASH ຕົວຢ່າງ, ຕົວປ່ຽນແປງຂອງ RANDOM ສົ່ງອອກເປັນຕົວເລກແບບສຸ່ມ. ຖ້າມັນຍັງບໍ່ໄດ້ ກຳ ນົດແລະຫຼັງຈາກນັ້ນກໍ່ໄດ້ ກຳ ນົດອີກຄັ້ງ, ຄ່າຕົວແປເດີມກໍ່ຈະສູນເສຍຕະຫຼອດໄປ. ເພາະສະນັ້ນມັນຖືກແນະ ນຳ ໃຫ້ຢ່າໃຊ້ລະບົບຕົວແປທີ່ ກຳ ນົດໄວ້.

    ນີ້ແມ່ນບັນຊີຂອງຕົວແປ BASH ທີ່ມີປະໂຫຍດບາງຢ່າງ.

    <

  • BASH - ຊື່ເຕັມຂອງ Bash.
  • BASH_VERSION - ລຸ້ນຂອງ Bash (ຕົວຢ່າງ 2.04.0 (1) - ກະລຸນາ).
  • ສີ - ຈຳ ນວນຕົວອັກສອນຕໍ່ແຖວໃນຈໍສະແດງຂອງທ່ານ (ຕົວຢ່າງ 80).
  • HOSTNAME - ຊື່ຂອງຄອມພິວເຕີ້. ພາຍໃຕ້ບາງລຸ້ນຂອງ Linux, ນີ້ສາມາດເປັນຊື່ເຄື່ອງຈັກ. ຢູ່ບ່ອນອື່ນ, ມັນສາມາດເປັນຊື່ໂດເມນທີ່ມີເງື່ອນໄຂຄົບຖ້ວນ.
  • HOSTTYPE- ຄອມພິວເຕີຊະນິດ ໜຶ່ງ.
  • ໜ້າ ທຳ ອິດ - ຊື່ຂອງລາຍຊື່ເຮືອນຂອງເຈົ້າ.
  • OSTYPE - ຊື່ຂອງລະບົບປະຕິບັດການ.
  • PATH - ແຍກບັນດາລາຍຊື່ເສັ້ນທາງຊອກຫາເພື່ອຊອກຫາ ຄຳ ສັ່ງທີ່ຕ້ອງເຮັດ.
  • PPID - ລະຫັດ ID ຂອງຂະບວນການແມ່ຂອງຫອຍ.
  • PROMPT_COMMAND- ສັ່ງໃຫ້ ດຳ ເນີນການກ່ອນການຕັ້ງ PS1 ຊ່ອຍແນ່ເບື້ອງຕົ້ນ.
  • PWD - ໄດເລກະທໍລີເຮັດວຽກໃນປະຈຸບັນ (ຕາມທີ່ ກຳ ນົດໂດຍ ຄຳ ສັ່ງ cd).
  • RANDOM - ສົ່ງ ຈຳ ນວນແບບສຸ່ມລະຫວ່າງ 0 ເຖິງ 32767 ທຸກໆຄັ້ງທີ່ມັນຖືກອ້າງອີງ.
  • SHELL - ຫອຍທີ່ຕ້ອງການໃຊ້; ສຳ ລັບໂປແກຼມທີ່ເລີ່ມແກະ ສຳ ລັບທ່ານ.
  • TERM - ປະເພດການເຮັດແບບ ຈຳ ລອງແບບປາຍທາງ (ຕົວຢ່າງ, ຄອນໂຊນ).
  • ກົດລະບຽບຂອງການແບ່ງປັນ ຄຳ ສັບ.

    $ LEVEL=0
    $ printf "%i" $LEVEL
    0
    
    AND
    
    $ LEVEL=”0”
    $ printf "%i" $LEVEL
    0

    ໃນທັງສອງກໍລະນີຜົນຜະລິດຍັງຄົງຄືເກົ່າ. ສະນັ້ນມັນມີຄວາມແຕກຕ່າງກັນແນວໃດໃນການໃຊ້ວົງຢືມ?

    ສາມາດກວດສອບຂໍ້ມູນດຽວກັນກັບຂໍ້ມູນຕົວແປທີ່ແຕກຕ່າງກັນ.

    $ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
    bash: 1: command not found 
    bash: 2: command not found 
    bash: 3: command not found 
    bash: 4: command not found 
    bash: 5: command not found
    $ printf "%i" $LEVEL
    0

    ບໍ່ໄດ້ກ່າວເຖິງ, ຜົນຜະລິດກໍ່ບໍ່ຖືກຕ້ອງ. BASH ກຳ ລັງປະຕິບັດ ໜ້າ ທີ່ພາຍຫຼັງ '0' ເປັນການສິ້ນສຸດແລະດັ່ງນັ້ນມູນຄ່າຂອງຕົວແປຖືກ ກຳ ນົດເປັນ '0'. ຕອນນີ້ພວກເຮົາພະຍາຍາມໃຊ້ວົງຢືມ ສຳ ລັບຕົວປ່ຽນຕ່າງໆດັ່ງລຸ່ມນີ້.

    $ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
    $ printf "%s" $LEVEL 
    0;1;2;3;4;5

    ເຖິງຢ່າງໃດກໍ່ຕາມຜົນໄດ້ຮັບແມ່ນບໍ່ຖືກຕ້ອງ. BASH ເອົາຄ່າຕົວປ່ຽນແລະ ກຳ ຈັດພື້ນທີ່ທັງ ໝົດ ໃນລະຫວ່າງພວກມັນ. ດັ່ງນັ້ນ printf ບໍ່ໄດ້ຕີຄວາມ ໝາຍ 0,1,2,3,5,5 ເປັນຄຸນຄ່າທີ່ແຕກຕ່າງກັນ. ສະນັ້ນທາງແກ້ໄຂແມ່ນຫຍັງ?

    printf "%s" "$LEVEL" 
    0 ; 1 ; 2 ; 3 ; 4 ; 5

    ເອີ້! ການໃສ່ຕົວປ່ຽນຕົວປ່ຽນແປງພາຍໃຕ້ ຄຳ ເວົ້າແມ່ນວິທີແກ້ໄຂ. ວົງຢືມມີກຸ່ມລັກສະນະເປັນຫອຍແລະຕີຄວາມ ໝາຍ ຂອງລັກສະນະພິເສດໃນທາງທີ່ມີຄວາມ ໝາຍ.

    ວົງຢືມສາມາດຖືກນໍາໃຊ້ກັບຄືນໄປບ່ອນແລະມັນເປັນຄວາມຄິດທີ່ດີທີ່ຈະປະກອບຕົວປ່ຽນແທນທີ່ມີຕົວແປ. ຍິ່ງໄປກວ່ານັ້ນມັນສາມາດຖືກ ນຳ ໃຊ້ເພື່ອແຍກບົດເລື່ອງລວມຈາກການອ້າງອີງ. ນີ້ແມ່ນຕົວຢ່າງ.

    $ LEVEL=5 
    $ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
    $ printf “%s” “$FLAG_MESSAGE”
    “I HAVE CLEARED LEVEL5. I Deserve appreciation.”

    ການແຍກຂໍ້ແຕກຕ່າງຂອງຂໍ້ຄວາມທີ່ອ້າງອີງໃສ່ພື້ນທີ່ຈະເຮັດໃຫ້ເກີດບັນຫາຄືກັນກັບທີ່ໄດ້ກ່າວມາຂ້າງເທິງ. ແບັກດັງດັ່ງກ່າວຈະປິ່ນປົວພື້ນທີ່ສີຂາວເປັນການສິ້ນສຸດ. ອີກວິທີ ໜຶ່ງ ຂອງການປ່ຽນແທນຕົວປ່ຽນແມ່ນ.

    $ LEVEL=5
    
    $ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 
    
    $ printf “%s” "$FLAG_MESSAGE" 
    “I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

    ວົງຢືມດຽວແມ່ນ ຈຳ ກັດ BASH ຈາກການພິມຕົວອັກສອນພິເສດ.

    $ printf “%s” '$FLAG_MESSAGE'
    “$FLAG_MESSAGE”

    Backslash ເຮັດວຽກຄືກັບ ຄຳ ເວົ້າດຽວ ສຳ ລັບຕົວລະຄອນ. ເຈົ້າເຄີຍຄິດວ່າເຈົ້າຈະພິມ (“) ໄດ້ແນວໃດ?

    $ printf "%c" "\""

    ເມື່ອ% q ຖືກຈັດກຸ່ມກັບ printf, ໃຫ້ ຄຳ ສັບ backslash ຫຼັງຈາກທຸກໆ ຄຳ ເພື່ອຮັບປະກັນສະຖານທີ່ຂອງ ຄຳ.

    $ LEVEL=5
    
    $ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 
    
    $ printf “%q” "$FLAG_MESSAGE" 
    “I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

    ດຽວນີ້ ໝົດ ແລ້ວ. ພວກເຮົາສະເຫມີພະຍາຍາມໃຫ້ຜູ້ອ່ານຂອງພວກເຮົາມີບົດຂຽນທີ່ມີປະໂຫຍດແກ່ພວກເຂົາທຸກໆຕອນນີ້ແລະຫຼັງຈາກນັ້ນ. ບົດຂຽນທີ່ກ່າວມາຂ້າງເທິງແມ່ນເນື້ອໃນສ່ວນທີ່ເຫຼືອເຊິ່ງມີຕົວຢ່າງຈະຖືກຜະລິດໃນບົດຄວາມຕໍ່ໄປເຊິ່ງຈະປະກອບມີ 'ຄຸນລັກສະນະຂອງຕົວແປ', 'ການສົ່ງອອກຕົວປ່ຽນແປງ'.

    Till ຫຼັງຈາກນັ້ນ Stay tuned ແລະເຊື່ອມຕໍ່ກັບ linux-console.net. ຢ່າລືມໃຫ້ພວກເຮົາມີ ຄຳ ຕິຊົມທີ່ມີຄ່າຂອງທ່ານໃນສ່ວນ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້.