ວິທີການຜ່ານການໂຕ້ຖຽງກັບ Script-Bash

ຄໍາສັ່ງ, syntax ແລະຕົວຢ່າງ

ທ່ານສາມາດຂຽນ script bash ດັ່ງນັ້ນມັນຈະໄດ້ຮັບການໂຕ້ຖຽງທີ່ລະບຸເມື່ອ script ຖືກເອີ້ນຈາກເສັ້ນຄໍາສັ່ງ. ວິທີນີ້ໃຊ້ໃນເວລາທີ່ສະຄິບຕ້ອງປະຕິບັດຫນ້າທີ່ແຕກຕ່າງເລັກນ້ອຍຂຶ້ນຢູ່ກັບຄ່າຂອງພາລາມິເຕີປະກອບ (ການໂຕ້ຖຽງ).

ຕົວຢ່າງເຊັ່ນ, ທ່ານອາດຈະມີສະຄິບທີ່ເອີ້ນວ່າ "stats.sh" ທີ່ດໍາເນີນການປະຕິບັດງານໂດຍສະເພາະໃນໄຟລ໌ເຊັ່ນການນັບຄໍາເວົ້າຂອງມັນ. ຖ້າທ່ານຕ້ອງການທີ່ຈະສາມາດໃຊ້ສະຄິບທີ່ຢູ່ໃນໄຟລ໌ຈໍານວນຫລາຍມັນກໍ່ດີທີ່ຈະຜ່ານຊື່ໄຟລ໌ເປັນການໂຕ້ຖຽງ, ດັ່ງນັ້ນທ່ານສາມາດໃຊ້ສະຄິບດຽວກັນສໍາລັບໄຟລ໌ທັງຫມົດທີ່ຈະໄດ້ຮັບການປະຕິບັດ. ຕົວຢ່າງ: ຖ້າຊື່ຂອງໄຟລ໌ທີ່ຈະຖືກປະຕິບັດແມ່ນ "songlist", ທ່ານຈະຕ້ອງເອົາຄໍາສັ່ງຕໍ່ໄປນີ້:

sh statssh songlist

Arguments ແມ່ນເຂົ້າໃນ script ໂດຍໃຊ້ຕົວແປ $ 1, $ 2, $ 3, etc, ບ່ອນທີ່ $ 1 ຫມາຍເຖິງການໂຕ້ຖຽງທໍາອິດ, $ 2 ກັບການໂຕ້ຖຽງທີສອງ, ແລະອື່ນໆ. ນີ້ແມ່ນສະແດງຢູ່ໃນຕົວຢ່າງຕໍ່ໄປນີ້:

FILE1 = $ 1 wc $ FILE1

ສໍາລັບການອ່ານ, ໃຫ້ກໍານົດຕົວແປທີ່ມີຊື່ຄໍາອະທິບາຍຕໍ່ກັບຄ່າຂອງການໂຕ້ຖຽງທໍາອິດ ($ 1), ແລະຫຼັງຈາກນັ້ນໃຫ້ໂທຫາຄໍາສັບປະໂຫຍກຄໍາ ( wc ) ໃນຕົວແປນີ້ ($ FILE1).

ຖ້າທ່ານມີຈໍານວນຕົວຢ່າງຂອງຕົວຢ່າງ, ທ່ານສາມາດໃຊ້ຕົວແປ "$ @" ຊຶ່ງເປັນອາເລຂອງຕົວກໍານົດການປ້ອນຂໍ້ມູນທັງຫມົດ. ນີ້ຫມາຍຄວາມວ່າທ່ານສາມາດໃຊ້ ວົງຈອນສໍາລັບການ ແກ້ໄຂບັນຫາແຕ່ລະຄັ້ງ, ສະແດງໃຫ້ເຫັນໃນຕົວຢ່າງຕໍ່ໄປນີ້:

ສໍາລັບ FILE1 ໃນ "$ @" ເຮັດ wc $ FILE1 ແລ້ວ

ນີ້ແມ່ນຕົວຢ່າງຂອງວິທີການໂທຫາສະຄິບນີ້ດ້ວຍການໂຕ້ຖຽງຈາກບັນທັດຄໍາສັ່ງ:

sh statssh songlist1 songlist2 songlist3

ຖ້າການໂຕ້ຖຽງມີສະຖານທີ່, ທ່ານຈໍາເປັນຕ້ອງຕິດຢູ່ກັບຄໍາເວົ້າດຽວ. ຍົກ​ຕົວ​ຢ່າງ:

sh statssh 'songlist 1' 'songlist 2' 'songlist 3'

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

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

makereport -u jsmith -p notebooks-d 10-20-2011 -f pdf

Bash ເຮັດໃຫ້ການທໍາງານນີ້ມີຟັງຊັນ "getopts". ສໍາລັບຕົວຢ່າງຂ້າງເທິງ, ທ່ານສາມາດໃຊ້ getopts ດັ່ງຕໍ່ໄປນີ້:

ນີ້ແມ່ນຊ່ວງ ເວລາ ທີ່ໃຊ້ຟັງຊັນ "getopts" ແລະເອີ້ນວ່າ "optstring" ໃນກໍລະນີນີ້ "u: d: p: f:", ເພື່ອ iterate ຜ່ານການໂຕ້ຖຽງ. ໃນຂະນະທີ່ຂົວຂ້າມຜ່ານ optstring, ເຊິ່ງປະກອບດ້ວຍປ້າຍທີ່ສາມາດຖືກນໍາໃຊ້ເພື່ອຜ່ານການໂຕ້ຖຽງ, ແລະມອບຄ່າການໂຕ້ຕອບທີ່ສະຫນອງໃຫ້ສໍາລັບທຸງນັ້ນກັບຕົວແປ "ຕົວເລືອກ". ລາຍການ case-statement ຫຼັງຈາກນັ້ນໄດ້ມອບຄ່າຂອງຕົວແປ "ຕົວເລືອກ" ກັບຕົວແປທົ່ວໂລກທີ່ສາມາດໃຊ້ຫຼັງຈາກການໂຕ້ຖຽງທັງຫມົດໄດ້ຖືກອ່ານ.

ຕົວຊີ້ວັດໃນ optstring ຫມາຍຄວາມວ່າຄ່າທີ່ຕ້ອງການສໍາລັບທຸງທີ່ສອດຄ້ອງກັນ. ໃນຕົວຢ່າງຂ້າງເທິງທຸງທັງຫມົດປະຕິບັດຕາມຄໍາວ່າ "u: d: p: f:". ນີ້ຫມາຍຄວາມວ່າ, ທຸງທັງຫມົດຕ້ອງມີມູນຄ່າ. ຕົວຢ່າງເຊັ່ນ, "d" ແລະ "f" ທຸງບໍ່ຄາດວ່າຈະມີຄ່າ, optstring ຈະ "u: dp: f".

ຕົວຢ່າງທີ່ຢູ່ໃນຈຸດເລີ່ມຕົ້ນຂອງ optstring, ເຊັ່ນ: "u: d: p: f:", ມີຄວາມຫມາຍແຕກຕ່າງກັນຫມົດ. ມັນອະນຸຍາດໃຫ້ທ່ານສາມາດຈັດການກັບທຸງທີ່ບໍ່ໄດ້ຖືກສະແດງໃນຕົວເລືອກ. ໃນກໍລະນີດັ່ງກ່າວມູນຄ່າຂອງຕົວເລືອກ "ຕົວເລືອກ" ຖືກຕັ້ງໃຫ້ "?" ແລະມູນຄ່າຂອງ "OPTARG" ຖືກກໍານົດໄວ້ໃນທຸງທີ່ບໍ່ໄດ້ຄາດຫວັງ. ອະນຸຍາດໃຫ້ທ່ານສະແດງຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ເຫມາະສົມແຈ້ງໃຫ້ຜູ້ໃຊ້ຮູ້ຜິດພາດ.

ການໂຕ້ຖຽງທີ່ບໍ່ໄດ້ຖືກນໍາຫນ້າໂດຍທຸງຊາດແມ່ນຖືກປະຕິເສດໂດຍ getopts. ຖ້າທົງທີ່ຖືກລະບຸໄວ້ໃນຕົວເລືອກທີ່ບໍ່ໄດ້ຖືກສະຫນອງເມື່ອສະຄິບຖືກເອີ້ນ, ບໍ່ມີຫຍັງເກີດຂຶ້ນ, ເວັ້ນເສຍແຕ່ວ່າທ່ານພິເສດຈັດການກັບກໍລະນີນີ້ໃນລະຫັດຂອງທ່ານ. ການໂຕ້ຖຽງໃດໆທີ່ບໍ່ໄດ້ຮັບການຄຸ້ມຄອງໂດຍ getops ຍັງສາມາດຖືກຈັບດ້ວຍຕົວແປ $ 1, $ 2, ແລະອື່ນໆ.