របៀបដើម្បីបញ្ជូនអាគុយម៉ង់ទៅស្គ្រីប Bash

ពាក្យបញ្ជាវាក្យសម្ព័ន្ធនិងឧទាហរណ៍

អ្នកអាចសរសេរ ស្គ្រីប bash ដូច្នេះវាទទួលបានអាគុយម៉ង់ដែលបានបញ្ជាក់នៅពេលស្គ្រីបត្រូវបានហៅពីបន្ទាត់ពាក្យបញ្ជា។ វិធីសាស្ត្រនេះត្រូវបានប្រើនៅពេលស្គ្រីបត្រូវអនុវត្តមុខងារខុសគ្នាបន្តិចបន្តួចអាស្រ័យលើតម្លៃនៃប៉ារ៉ាម៉ែត្របញ្ចូល (អាគុយម៉ង់) ។

ឧទាហរណ៍អ្នកអាចមានស្គ្រីបដែលហៅថា "stats.sh" ដែលធ្វើប្រតិបត្តិការជាក់លាក់លើឯកសារដូចជារាប់ពាក្យរបស់វា។ ប្រសិនបើអ្នកចង់ប្រើស្គ្រីបនោះលើឯកសារជាច្រើនវាល្អបំផុតដើម្បីបញ្ជូនឈ្មោះឯកសារជាអាគុយម៉ង់មួយដូច្នេះអ្នកអាចប្រើស្គ្រីបដូចគ្នាសម្រាប់ឯកសារទាំងអស់ដែលត្រូវដំណើរការ។ ឧទាហរណ៍ប្រសិនបើឈ្មោះឯកសារត្រូវបានដំណើរការគឺ "songlist" អ្នកអាចបញ្ចូលបន្ទាត់ពាក្យបញ្ជាដូចខាងក្រោម:

sh stats.sh បញ្ជីចម្រៀង

អាគុយម៉ង់ត្រូវបានចូលដំណើរការនៅក្នុងស្គ្រីបដោយប្រើអថេរ $ 1, $ 2, $ 3, ល។ ដែល $ 1 សំដៅលើអាគុយម៉ង់ទីមួយ $ 2 ទៅអាគុយម៉ង់ទីពីរ។ ល។ នេះត្រូវបានបង្ហាញក្នុងឧទាហរណ៍ខាងក្រោម:

FILE1 = $ 1 wc $ FILE1

សម្រាប់ការអានកំណត់អថេរមួយដែលមានឈ្មោះពិពណ៌នាទៅតម្លៃនៃអាគុយម៉ង់ទីមួយ ($ 1) ហើយបន្ទាប់មកហៅឧបករណ៍រាប់ពាក្យ ( wc ) លើអថេរនេះ ($ FILE1) ។

ប្រសិនបើអ្នកមានអាគុយម៉ង់ចំនួនអថេរអ្នកអាចប្រើអថេរ "$ @" ដែលជាអារេនៃប៉ារ៉ាម៉ែត្របញ្ចូលទាំងអស់។ នេះមានន័យថាអ្នកអាចប្រើ រង្វិលជុំ សម្រាប់ដំណើរការវាម្តង ៗ ដូចបានបង្ហាញក្នុងឧទាហរណ៍ខាងក្រោម:

សម្រាប់ FILE1 ក្នុង "$ @" តើ wc $ FILE1 បានបញ្ចប់

នេះជាឧទាហរណ៍អំពីរបៀបហៅស្គ្រីបនេះជាមួយអាគុយម៉ង់ពីបន្ទាត់ពាក្យបញ្ជា:

sh stats.sh songlist1 songlist2 songlist3

ប្រសិនបើអាគុយម៉ង់មានដកឃ្លាអ្នកត្រូវភ្ជាប់វាជាមួយសញ្ញាសម្រង់តែមួយ។ ឧទាហរណ៍:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

ជាញឹកញាប់ស្គ្រីបមួយត្រូវបានសរសេរដូច្នេះអ្នកប្រើអាចឆ្លងកាត់អាគុយម៉ង់នៅក្នុងលំដាប់ណាមួយដោយប្រើទង់ជាតិ។ ជាមួយវិធីទង់ជាតិអ្នកក៏អាចធ្វើអាគុយម៉ង់មួយចំនួនស្រេចចិត្តបានដែរ។

អនុញ្ញាតឱ្យនិយាយថាអ្នកមានស្គ្រីបដែលទាញយកព័ត៌មានពីឃ្លាំងទិន្នន័យដែលមានមូលដ្ឋានលើប៉ារ៉ាម៉ែត្រដែលបានបញ្ជាក់ដូចជា "ឈ្មោះអ្នកប្រើ" "កាលបរិច្ឆេទ" និង "ផលិតផល" ហើយបង្កើតរបាយការណ៏នៅក្នុង "ទ្រង់ទ្រាយ" ដែលបានបញ្ជាក់។ ឥឡូវអ្នកចង់សរសេរស្គ្រីបរបស់អ្នកដូច្នេះអ្នកអាចហុចប៉ារ៉ាម៉ែត្រទាំងនេះនៅពេលស្គ្រីបត្រូវបានហៅ។ វាអាចមើលទៅដូចនេះ:

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

Bash អនុញ្ញាតមុខងារនេះជាមួយមុខងារ "getopts" ។ សម្រាប់ឧទាហរណ៍ខាងលើអ្នកអាចប្រើ getopts ដូចខាងក្រោម:

នេះគឺជា រង្វង់ពេល ដែលប្រើមុខងារ "getopts" និងអ្វីដែលហៅថា "optstring" ក្នុងករណីនេះ "u: d: p: f:" ដើម្បីធ្វើឱ្យវាត្រលប់តាមអាគុយម៉ង់។ ខណៈពេលដែលរង្វិលជុំដើរឆ្លងកាត់ optstring ដែលមានទង់ដែលអាចត្រូវបានប្រើដើម្បីហុចអាគុយម៉ង់ហើយផ្តល់តម្លៃអាគុយម៉ង់ដែលបានផ្តល់សម្រាប់ទង់ជាតិនោះទៅអថេរ "ជម្រើស" ។ សេចក្តីថ្លែងការណ៍ករណីនោះផ្តល់តម្លៃនៃអថេរ "" ទៅជាអថេរសកលដែលអាចប្រើបានបន្ទាប់ពីអាគុយម៉ង់ទាំងអស់ត្រូវបានអាន។

សញ្ញាចុចក្នុងសញ្ញាវង់ក្រចកមានន័យថាតម្លៃត្រូវបានទាមទារសម្រាប់ទង់ដែលត្រូវគ្នា។ នៅក្នុងឧទាហរណ៍ខាងលើទង់ទាំងអស់ត្រូវបានបន្តដោយពោះវៀន: "u: d: p: f:" ។ នេះមានន័យថាទង់ទាំងអស់ត្រូវការតម្លៃ។ ឧទាហរណ៍ប្រសិនបើទង់ "d" និង "f" មិនត្រូវបានរំពឹងថាមានតម្លៃនោះ optstring នឹងមាន "u: dp: f" ។

ពោះវៀនធំនៅដើមដំបូងនៃអ័ដាមឃែរឧទាហរណ៍ "u: d: p: f:" មានអត្ថន័យខុសគ្នាទាំងស្រុង។ វាអនុញ្ញាតឱ្យអ្នកគ្រប់គ្រងទង់ជាតិដែលមិនត្រូវបានតំណាងនៅក្នុងជម្រើស។ ក្នុងករណីនោះតម្លៃនៃអថេរ "ជម្រើស" ត្រូវបានកំណត់ទៅ "?" និងតម្លៃនៃ "OPTARG" ត្រូវបានកំណត់ទៅទង់ដែលមិនបានរំពឹងទុក។ នេះអនុញ្ញាតឱ្យអ្នកបង្ហាញសារកំហុសដែលសមរម្យជូនដល់អ្នកប្រើកំហុស។

អាគុយម៉ង់ដែលមិនត្រូវបានដាក់ទង់ដោយទង់ជាតិត្រូវបានមិនអើពើដោយ getopts ។ ប្រសិនបើទង់ជាតិដែលបានបញ្ជាក់នៅក្នុងវង់ភ្លេងមិនត្រូវបានផ្តល់នៅពេលស្គ្រីបត្រូវបានគេហៅថាគ្មានអ្វីកើតឡើងទេលុះត្រាតែអ្នកដោះស្រាយរឿងនេះនៅក្នុងកូដរបស់អ្នក។ អាគុយម៉ង់ណាមួយដែលមិនត្រូវបានគ្រប់គ្រងដោយ getops នៅតែអាចត្រូវបានចាប់យកជាមួយអថេរធម្មតា $ 1, $ 2 ។ ល។