Როგორ გადავიდეთ არგუმენტები Bash-Script- ში

ბრძანებები, სინტაქსი და მაგალითები

თქვენ შეგიძლიათ დაწეროთ ბატწერის სკრიპტი ისე, რომ ის მიიღებს არგუმენტს მითითებულ ბრძანებასთან დაკავშირებით. ეს მეთოდი გამოიყენება, როდესაც სკრიპტი შეასრულებს ოდნავ განსხვავებულ ფუნქციას შეყვანის პარამეტრების მნიშვნელობებზე (არგუმენტები).

მაგალითად, შეგიძლიათ დაწეროთ სკრიპტი "stats.sh", რომელიც ასრულებს კონკრეტულ ოპერაციას ფაილზე, როგორიცაა მისი სიტყვების დათვლა. თუ გსურთ ამ სკრიპტის გამოყენება ბევრ ფაილზე, უმჯობესია შეიტანოთ ფაილის სახელი, როგორც არგუმენტი, ისე, რომ თქვენ შეგიძლიათ გამოიყენოთ იგივე სკრიპტი ყველა ფაილების დამუშავება. მაგალითად, იმ შემთხვევაში, თუ ფაილის დამუშავების სახელი არის "სიმღერა", თქვენ უნდა შეიყვანოთ შემდეგი ბრძანების:

sh stats.sh სიმღერა

$ 1, $ 2, $ 3 და ა.შ., სადაც $ 1 ეხება პირველ არგუმენტს, $ 2 მეორე არგუმენტს და ასე შემდეგ. ეს ილუსტრირებულია შემდეგ მაგალითში:

FILE1 = $ 1 wc $ FILE1

წაკითხვისთვის, ცვლადს მიანიჭეთ აღწერითი სახელი პირველი არგუმენტის მნიშვნელობით ($ 1), შემდეგ კი ამ ცვლადში ($ FILE1) სიტყვის დათვლის კომუნალური ( WC ).

თუ თქვენ გაქვთ ცვლადი რაოდენობის არგუმენტები, შეგიძლიათ გამოიყენოთ "$ @" ცვლადი, რომელიც არის მასივი ყველა შეყვანის პარამეტრების. ეს ნიშნავს, რომ თქვენ შეგიძლიათ გამოიყენოთ მარყუჟის გამოყენება, რათა გაითვალისწინოთ თითოეული, როგორც შემდეგ მაგალითში:

FILE1- ისთვის "$ @" wc $ FILE1 გაკეთდა

აქ არის მაგალითი იმისა, თუ როგორ დაუკავშირდით ამ სცენარს არგუმენტები ბრძანებისგან:

sh stats.sh songlist1 songlist2 songlist3

თუ არგუმენტი აქვს სივრცეებს, საჭიროა ერთჯერადი შეთავაზებები. მაგალითად:

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

ხშირად დაწერილია სკრიპტი ისე, რომ მომხმარებელს შეეძლება არგუმენტებში ნებისმიერი დროში დროშებით გამოყენება. დროშების მეთოდით, ასევე შეგიძლიათ გააკეთოთ რამდენიმე არგუმენტირება.

ვთქვათ, თქვენ გაქვთ სკრიპტი, რომელიც მონაცემთა ბაზიდან მიიღებს ინფორმაციას განსაზღვრულ პარამეტრებზე, როგორიცაა "სახელი", "თარიღი" და "პროდუქტი" და ანგარიშს ქმნის ანგარიშში მითითებულ "ფორმატში". ახლა თქვენ გსურთ დაწეროთ სკრიპტი ისე, რომ ამ პარამეტრებში შეყვანა შეძლებთ სკრიპტის სახელს. ეს შეიძლება ასე გამოიყურებოდეს:

makereport -u jsmith -p ნოუთბუქები -d 10-20-2011 -f pdf

Bash საშუალებას ამ ფუნქციას "getopts" ფუნქცია. ზემოთ მოყვანილი მაგალითისთვის შეგიძლიათ მიიღოთ გრაფები შემდეგი სახით:

ეს არის ხერხი, რომელიც იყენებს "getopts" ფუნქციას და ე.წ. "optstring", ამ შემთხვევაში "u: d: p: f:", რომ iterate მეშვეობით არგუმენტები. ხოლო-მარყუჟის მეშვეობით გადის optstring, რომელიც შეიცავს დროშებს, რომლებიც შეიძლება გამოყენებულ იქნას არგუმენტების გასავლელად და მიანიჭოს ცვლადი "პარამეტრისთვის" მოცემულ არგუმენტულ მნიშვნელობას. საქმის განაცხადი შემდეგ ანიჭებს ცვლადი "ვარიანტის" გლობალურ ცვლადს, რომელიც შეიძლება გამოყენებულ იქნას ყველა არგუმენტის წაკითხვის შემდეგ.

კოლონონები ამონახსნის იმას ნიშნავს, რომ ფასეულობები აუცილებელია შესაბამისი დროშებისათვის. ზემოთ მოყვანილ მაგალითში ყველა დროშა მოჰყვება მსხვილფეხა რქოსანი სახით: "u: d: p: f:". ეს იმას ნიშნავს, რომ ყველა დროშა საჭიროა. თუ, მაგალითად, "დ" და "ფ" დროშები არ იქნებოდა მოსალოდნელი, ამონახსნი იქნებოდა "u: dp: f".

კოლონის დასაწყისში optstring, მაგალითად: "u: d: p: f:", აქვს სრულიად განსხვავებული მნიშვნელობა. ეს საშუალებას გაძლევთ გაუმკლავდეთ დროშებს, რომლებიც არ არიან წარმოდგენილი. ასეთ შემთხვევაში "ვარიანტი" ცვლადის ღირებულება ""? " და "OPTARG" - ის ღირებულებაა მოულოდნელი დროშისთვის. შეცდომის მომხმარებლის ინფორმირების საშუალებას იძლევა შესაბამისი შეცდომის შეტყობინება.

არგუმენტები, რომლებიც არ უშვებენ დროშას, იგნორირებულია გრაფტების მიერ. თუ ფანჯრები არ არის მითითებული, როდესაც სკრიპტის მოწოდება არ ხდება, არაფერი მოხდება, თუ სპეციალურად ამ საქმის განხილვა არ იქნება თქვენს კოდში. ნებისმიერი არგუმენტი, რომელიც არ არის გადანაწილებული, ვერ მიიღებს რეგულარული $ 1, $ 2 და ა.შ. ცვლადებს.