ആർഡ്വിഡ്സ് എങ്ങനെയാണ് ഒരു ബഷിൻ സ്ക്രിപ്റ്റിന് കൈമാറുന്നത്?

കമാൻഡുകൾ, സിന്റാക്സ്, ഉദാഹരണങ്ങൾ

സ്ക്രിപ്റ്റ് കമാൻഡ് ലൈനിൽ നിന്നും ലഭ്യമാകുമ്പോൾ വ്യക്തമാക്കുന്ന ആർഗ്യുമെന്റുകൾ സ്വീകരിക്കുന്ന ഒരു ബാഷ് സ്ക്രിപ്റ്റ് നിങ്ങൾക്ക് എഴുതാം. ഇൻപുട്ട് പരാമീറ്ററുകളുടെ (ആർഗ്യുമെന്റുകൾ) മൂല്യങ്ങളെ ആശ്രയിച്ച് ഒരു സ്ക്രിപ്റ്റ് അല്പം വ്യത്യസ്ത ഫംഗ്ഷൻ നടത്തുമ്പോൾ ഈ രീതി ഉപയോഗിക്കുന്നു.

ഉദാഹരണത്തിന്, ഒരു ഫയലിൽ ഒരു നിർദ്ദിഷ്ട പ്രവർത്തനം നടപ്പിലാക്കുന്ന "stats.sh" എന്ന സ്ക്രിപ്റ്റ് നിങ്ങൾക്ക് ഉണ്ടാവാം, അതായത് അതിന്റെ വാക്കുകൾ എണ്ണുന്നത് പോലെ. പല ഫയലുകളിലും ഈ സ്ക്രിപ്റ്റ് ഉപയോഗിക്കാൻ നിങ്ങൾക്ക് കഴിയണമെങ്കിൽ, ഫയൽ നാമം ഒരു ആർഗ്യുമെന്റ് ആയി നൽകുന്നത് നല്ലതാണ്, അതിനാൽ എല്ലാ ഫയലുകൾക്കും ഒരേ സ്ക്രിപ്റ്റ് ഉപയോഗിക്കാൻ കഴിയും. ഉദാഹരണത്തിനു്, ഫയലിന്റെ പേരു് "Songlist" എന്നാണെങ്കിൽ, നിങ്ങൾ ഈ കമാൻഡ് ലൈൻ നൽകേണ്ടതാണു്:

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'

ഫ്ലാഗുകൾ ഉപയോഗിച്ചും ഉപയോക്താവിന് ആർഗ്യുമെന്റുകളിലൂടെ കടന്നുപോകാൻ കഴിയുംവിധം ഒരു സ്ക്രിപ്റ്റ് എഴുതപ്പെടുന്നു. ഫ്ലാഗുകൾ രീതി ഉപയോഗിച്ച്, നിങ്ങൾക്ക് ചില വാക്യങ്ങളിൽ ഓപ്ഷണൽ നൽകാം.

"Username", "date", "product" തുടങ്ങിയ നിർദ്ദിഷ്ട പരാമീറ്ററുകളെ അടിസ്ഥാനമാക്കി ഒരു ഡേറ്റാബേസിൽ നിന്നുള്ള വിവരങ്ങൾ വീണ്ടെടുക്കുന്ന ഒരു സ്ക്രിപ്റ്റ് നിങ്ങൾക്ക് ഉണ്ടെന്ന് പറയട്ടെ, ഒരു നിർദ്ദിഷ്ട "ഫോർമാറ്റിൽ" ഒരു റിപ്പോർട്ട് ഉൽപാദിപ്പിക്കുന്നു. ഇപ്പോൾ നിങ്ങൾക്ക് നിങ്ങളുടെ സ്ക്രിപ്റ്റ് എഴുതാനാഗ്രഹിക്കുന്നു, അങ്ങനെ നിങ്ങൾക്ക് ഈ സ്ക്രിപ്റ്റുകളിൽ സ്ക്രിപ്റ്റ് ലഭിക്കുമ്പോൾ പാസ്വേർഡ് ചെയ്യാനാകും. ഇത് ഇതുപോലെ കാണപ്പെട്ടേക്കാം:

makereport -u jsmith -p നോട്ട്ബുക്ക് -d 10-20-2011 -f pdf

"Getopts" ഫങ്ഷനോടൊപ്പം ഈ പ്രവർത്തനത്തെ ബാഷ് സജ്ജമാക്കുന്നു. മുകളിൽ പറഞ്ഞ ഉദാഹരണത്തിൽ, നിങ്ങൾക്ക് getopts ഉപയോഗിക്കാം:

ഇത് "getopts" ഫങ്ഷനെയും "optstring" എന്ന് വിളിക്കുന്ന ഒരു കുറുക്കുവഴിയും ആണ്. ഈ സന്ദർഭത്തിൽ "u: d: p: f:", ആർഗ്യുമെന്റുകളിലൂടെ iterate ചെയ്യുക. ആർട്ട്മെന്റുകൾ കടന്നുപോകാൻ കഴിയുന്ന പതാകകൾ അടങ്ങുന്ന അറ്റ് സ്ട്രറിംഗിലൂടെയാണ്-ലൂപ്പ് നടക്കുന്നത്, കൂടാതെ ആ ഫ്ലാഗ് വേരിയബിളായി "ഓപ്ഷൻ" എന്നതിലേക്ക് നൽകിയ ആർഗ്യുമെൻറ് മൂല്ല്യം നൽകുന്നു. കേസ്-സ്റ്റേറ്റ്മെന്റ് എല്ലാ ആർഗ്യുമെന്റുകളും വായിച്ചതിനുശേഷം ഉപയോഗിക്കാവുന്ന ഒരു ആഗോള വേരിയബിളിലേക്കുള്ള വേരിയബിളിന്റെ "ഓപ്ഷൻ" ന്റെ മൂല്യം നൽകുന്നു.

അനുയോജ്യമായ പതാകകൾക്ക് മൂല്യങ്ങൾ ആവശ്യമാണെന്ന് അഡ്സ്ട്രറ്റിന്റെ കോളൺസ് അർത്ഥമാക്കുന്നു. മുകളിലുള്ള ഉദാഹരണത്തിൽ എല്ലാ പതാകകളും ഒരു കോളൺ പിന്തുടരുന്നു: "u: d: p: f:". എല്ലാ ഫ്ലാഗുകളിലും ഒരു മൂല്യം വേണം. ഉദാഹരണമായി, "d", "f" പതാകകൾ ഒരു മൂല്യമുണ്ടാകാൻ സാധ്യതയില്ലെങ്കിൽ, അക്സ്ട്രീം "u: dp: f" ആയിരിക്കും.

ഉദാഹരണത്തിന്, "u: d: p: f:" എന്ന ഒപ്ഷനിൽ ഒരു കോളൻ തികച്ചും വ്യത്യസ്തമായ അർഥമാണ്. അറ്റ്സ്ട്രീസ്റ്റിൽ പ്രതിനിധാനം ചെയ്യാത്ത പതാകകളെ കൈകാര്യം ചെയ്യാൻ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു. അങ്ങനെയെങ്കിൽ "ഓപ്ഷൻ" വേരിയബിളിന്റെ മൂല്യം "?" കൂടാതെ "OPTARG" യുടെ മൂല്യം അപ്രതീക്ഷിത ഫ്ലാഗിലേക്ക് സജ്ജമാക്കും. തെറ്റായ ഉപയോക്താവിനെ അറിയിക്കുന്ന ഒരു പിഴവ് സന്ദേശം കാണിയ്ക്കാൻ അനുവദിയ്ക്കുന്നു.

ഒരു പതാകയ്ക്ക് മുൻപായി വാദിക്കാത്ത വാദങ്ങൾ getopts വഴി അവഗണിക്കും. സ്ക്രിപ്റ്റ് വിളിച്ചപ്പോൾ വ്യക്തമാക്കിയ ഫ്ലാഗുകൾ നൽകുന്നില്ലെങ്കിൽ, ഈ കേസ് പ്രത്യേകമായി നിങ്ങളുടെ കോഡിൽ പ്രത്യേകമായി കൈകാര്യം ചെയ്യാതെ ഒന്നും സംഭവിക്കുന്നില്ല. ഗെറ്റസ് കൈകാര്യം ചെയ്യാത്ത എല്ലാ ആർഗ്യുമെന്റുകളും തുടർന്നും പതിവായി $ 1, $ 2, മുതലായവയിൽ വേരിയബിളുകൾ ഉപയോഗിച്ച് പിടിച്ചെടുക്കാവുന്നതാണ്.