ຄວາມເຂົ້າໃຈຂອງ Linux "ຕົວແປ" ໃນພາສາ Scripting Shell - ພາກທີ 9
ພວກເຮົາໄດ້ຂຽນບົດຂຽນຫຼາຍບົດກ່ຽວກັບ Linux Shell Scripting ເຊິ່ງໄດ້ຮັບການຕ້ອນຮັບຢ່າງອົບອຸ່ນໃນເວລານັ້ນແລະມັນມີຄວາມກ່ຽວຂ້ອງຫຼາຍເຖິງແມ່ນວ່າດຽວນີ້. ນີ້ແມ່ນການເຊື່ອມຕໍ່ກັບການລວບລວມບົດຄວາມກ່ຽວກັບການແກະສະເກັດຫອຍ.
<
ນີ້ຢູ່ໃນບົດຄວາມນີ້ພວກເຮົາຈະເຫັນຕົວແປ, ການປະຕິບັດແລະການຈັດຕັ້ງປະຕິບັດຂອງມັນໃນ shell shell.
ຜົນຜະລິດຂອງ ຄຳ ສັ່ງສາມາດຖືກໂອນໄປຫາຜົນຜະລິດແບບມາດຕະຖານຫຼືເອກະສານແລະສາມາດເກັບຮັກສາໄວ້ໃນຕົວແປໄດ້ເຊັ່ນກັນ. ຖ້າຜົນຜະລິດຂອງ ຄຳ ສັ່ງມີຂະ ໜາດ ໃຫຍ່ພໍທີ່ມັນບໍ່ ເໝາະ ສົມກັບ ໜ້າ ຈໍທີ່ພວກເຮົາຍັງເຫລືອພຽງແຕ່ມີທາງເລືອກໃນການບັນທຶກຜົນຜະລິດເຂົ້າໃນເອກະສານທີ່ຢູ່ໃນຕົວແປ. ປະໂຫຍດ ໜຶ່ງ ຂອງການປະຫຍັດຜົນຜະລິດໃຫ້ເປັນຕົວປ່ຽນແມ່ນຄວາມໄວໃນການກວດສອບໄວ. ຕົວແປຕ່າງໆຖືກບັນທຶກໄວ້ໃນຄວາມຊົງ ຈຳ ແລະເພາະສະນັ້ນມັນມັກຈະໄວຖ້າປຽບທຽບກັບການດຶງຂໍ້ມູນຈາກແຟ້ມເອກະສານ.
ຕົວແປແມ່ນສ່ວນປະກອບ ສຳ ຄັນທີ່ໃຊ້ໃນ Shell scripting ແລະຖືກປະກາດໂດຍໃຊ້ ຄຳ ສັ່ງ bash "ປະກາດ". ເພື່ອປະກາດຕົວປ່ຽນແປງເວົ້າວ່າ 'ລະດັບ', ພວກເຮົາ ຈຳ ເປັນຕ້ອງປະຕິບັດ ຄຳ ສັ່ງຕໍ່ໄປນີ້.
$ declare LEVEL
ໝາຍ ເຫດ: ພວກເຮົາ ຈຳ ເປັນຕ້ອງໃຊ້“ typecast”, ເຊິ່ງເປັນ ຄຳ ເວົ້າທີ່ສ້າງຂຶ້ນ ສຳ ລັບຄວາມເຂົ້າກັນໄດ້ຂອງ shell korn. ‘ປະກາດ” ແມ່ນມີຄວາມກ້າວ ໜ້າ ແລະມີທຸກຮູບແບບ, ສະນັ້ນແນະ ນຳ ໃຫ້ໃຊ້ໃນເວລາທີ່ໃຊ້ BASH.
<
ຕົວແປສາມາດຖືກມອບ ໝາຍ ຄ່າໂດຍໃຊ້ເຄື່ອງ ໝາຍ ທີ່ເທົ່າທຽມ (=). ເພື່ອ ກຳ ຫນົດສາຍເຊືອກທີ່ບໍ່ມີຄ່າໃຫ້ຕົວແປໃດ ໜຶ່ງ ພວກເຮົາບໍ່ຕ້ອງສະ ໜອງ ຄ່າໃດໆຫຼັງຈາກມີສັນຍາເທົ່າທຽມກັນ.
$ 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 ທີ່ມີປະໂຫຍດບາງຢ່າງ.
<
ກົດລະບຽບຂອງການແບ່ງປັນ ຄຳ ສັບ.
$ 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. ຢ່າລືມໃຫ້ພວກເຮົາມີ ຄຳ ຕິຊົມທີ່ມີຄ່າຂອງທ່ານໃນສ່ວນ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້.