ഷെൽ സ്ക്രിപ്റ്റിംഗ് ഭാഷയിലെ ലിനക്സ് വേരിയബിളുകൾ ഒരു ഇൻസൈറ്റ് - ഭാഗം 9


ലിനക്സ് ഷെൽ സ്uക്രിപ്റ്റിംഗിനെക്കുറിച്ച് ഞങ്ങൾ ഇതിനകം ഒരു കൂട്ടം ലേഖനങ്ങൾ എഴുതിയിട്ടുണ്ട്, അത് അക്കാലത്ത് സ്വാഗതം ചെയ്യപ്പെട്ടിരുന്നു, അത് ഇപ്പോഴും വളരെ പ്രസക്തമാണ്. ഷെൽ സ്ക്രിപ്റ്റിംഗിനെക്കുറിച്ചുള്ള ലേഖനങ്ങളുടെ ശേഖരത്തിലേക്കുള്ള ലിങ്ക് ഇതാ.

  1. Linux Shell Scripting പഠിക്കുക

ഇവിടെ ഈ ലേഖനത്തിൽ നമുക്ക് വേരിയബിളുകൾ, അതിന്റെ എക്സിക്യൂഷൻ, ഷെൽ സ്ക്രിപ്റ്റിൽ നടപ്പിലാക്കൽ എന്നിവ കാണാം.

ഒരു കമാൻഡിന്റെ ഔട്ട്uപുട്ട് സാധാരണ ഔട്ട്uപുട്ടിലേക്കോ ഫയലിലേക്കോ റീഡയറക്uട് ചെയ്യാനും ഒരു വേരിയബിളിൽ സൂക്ഷിക്കാനും കഴിയും. ഒരു കമാൻഡിന്റെ ഔട്ട്uപുട്ട് സ്uക്രീനുമായി യോജിക്കാത്ത വിധം വലുതാണെങ്കിൽ, ഒരു ഫയലിലേക്ക് ഔട്ട്uപുട്ട് വേരിയബിളിൽ സേവ് ചെയ്യാനുള്ള ഓപ്ഷൻ മാത്രമേ നമുക്ക് അവശേഷിക്കുന്നുള്ളൂ. വേരിയബിളിലേക്ക് ഔട്ട്uപുട്ട് സംരക്ഷിക്കുന്നതിന്റെ ഒരു ഗുണം വേഗതയേറിയ പരീക്ഷാ വേഗതയാണ്. വേരിയബിളുകൾ മെമ്മറിയിലേക്ക് സേവ് ചെയ്യപ്പെടുന്നു, അതിനാൽ ഫയലിൽ നിന്ന് വീണ്ടെടുക്കുന്നതിനെ അപേക്ഷിച്ച് ഇത് വേഗതയുള്ളതാണ്.

ഷെൽ സ്uക്രിപ്uറ്റിംഗിൽ ഉപയോഗിക്കുന്ന ഒരു പ്രധാന ഘടകമാണ് വേരിയബിളുകൾ, അവ ബാഷ് കമാൻഡ് ഉപയോഗിച്ച് പ്രഖ്യാപിക്കപ്പെടുന്നു \ഡിക്ലേർ. ഒരു വേരിയബിൾ പ്രഖ്യാപിക്കാൻ 'level' പറയൂ, നമ്മൾ താഴെയുള്ള കമാൻഡ് എക്uസിക്യൂട്ട് ചെയ്യേണ്ടതുണ്ട്.

$ declare LEVEL

ശ്രദ്ധിക്കുക: കോൺ ഷെൽ കോംപാറ്റിബിലിറ്റിക്ക് വേണ്ടിയുള്ള ബിൽറ്റ് ഇൻ സ്റ്റേറ്റ്uമെന്റായ \ടൈപ്പ്കാസ്റ്റ് ഞങ്ങൾ ഉപയോഗിക്കേണ്ടതുണ്ട്. 'ഡിക്ലേർ' കൂടുതൽ വിപുലമായതും എല്ലാ സവിശേഷതകളും ഉൾക്കൊള്ളുന്നതുമാണ്, അതിനാൽ BASH ഉപയോഗിക്കുമ്പോൾ ശുപാർശ ചെയ്യുന്നു.

  1. ഒരു വേരിയബിൾ നാമം സ്ക്രിപ്റ്റിലെ വേരിയബിളിന്റെ ഉപയോഗം ന്യായീകരിക്കണം.
  2. പ്രോഗ്രാമിലുടനീളം ഒരേ വേരിയബിൾ നാമം ഉപയോഗിക്കുന്നത് ശക്തമായി ഉപദേശിക്കുന്നു.
  3. വേരിയബിളുകളുടെ പേര് വലിയക്ഷരവും ചെറിയക്ഷരവുമാകാം, എന്നാൽ കൺവെൻഷൻ പ്രകാരം ഷെൽ കമാൻഡുകൾ ചെറിയക്ഷരത്തിലാണ്, അതിനാൽ എന്തെങ്കിലും ആശയക്കുഴപ്പം നീക്കുന്നതിന് ഞങ്ങൾ വലിയക്ഷരത്തിൽ വേരിയബിളുകളുടെ പേര് ഉപയോഗിക്കണം. ഉദാ. TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT മുതലായവ.

തുല്യ ചിഹ്നം (=) ഉപയോഗിച്ച് ഒരു വേരിയബിളിന് ഒരു മൂല്യം നൽകാം. ഒരു വേരിയബിളിലേക്ക് ഒരു ശൂന്യമായ സ്ട്രിംഗ് നൽകുന്നതിന് തുല്യ ചിഹ്നത്തിന് ശേഷം ഞങ്ങൾ ഒരു മൂല്യവും നൽകരുത്.

$ LEVEL =

'LEVEL' എന്ന വേരിയബിളിൽ സംഭരിച്ചിരിക്കുന്ന മൂല്യം ഇങ്ങനെ പരിശോധിക്കുക.

$ printf "%i" $LEVEL

printf, മിക്ക 'C' പ്രോഗ്രാമർമാർക്കും അറിയാവുന്ന കമാൻഡ്, ഡാറ്റ പ്രിന്റ് ചെയ്യുന്നു. %i - പൂർണ്ണസംഖ്യയെ പ്രതിനിധീകരിക്കുന്നു. ആവശ്യാനുസരണം നമുക്ക് അത് പ്രതീകത്തിന് %c എന്നോ സ്uട്രിങ്ങിന് %c എന്നോ മാറ്റിസ്ഥാപിക്കാം.

$LEVEL: 'LEVEL' എന്ന വേരിയബിളിന്റെ മൂല്യത്തിന് പകരമായി പ്രവർത്തിക്കുന്ന '$' ശ്രദ്ധിക്കുക.

$ printf "%i" $LEVEL
0

വേരിയബിളിന് ഒരു മൂല്യം നൽകുക.

$ LEVEL=0

സംഭരിച്ച ഡാറ്റ വേരിയബിളിൽ പരിശോധിക്കുക.

$ printf "%i" $LEVEL
0

ശ്രദ്ധിക്കുക: രണ്ട് സാഹചര്യങ്ങളിലും, ഞങ്ങൾ വേരിയബിളിന് മൂല്യം നൽകാത്തപ്പോഴും '0' മൂല്യം 'ലെവൽ' ഔട്ട്പുട്ടുകൾക്ക് 0 നൽകുമ്പോഴും 0. രണ്ട് സാഹചര്യങ്ങളിലും ഔട്ട്പുട്ട് ഒന്നുതന്നെയാണെങ്കിലും. എന്നാൽ ഷെൽ സ്ക്രിപ്റ്റ് രണ്ട് വേരിയബിൾ ഡിക്ലറേഷനും വ്യത്യസ്തമായി കൈകാര്യം ചെയ്യുന്നു.

വേരിയബിളിന് ഒരു പുതിയ മൂല്യം നൽകുക.

$ LEVEL=121

സംഭരിച്ച ഡാറ്റ വേരിയബിളിൽ പരിശോധിക്കുക.

$ printf "%i" $LEVEL
121

Declare ഒരു BASH കമാൻഡ് ആണ്, അത് എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ മാത്രം വേരിയബിൾ സൃഷ്ടിക്കുന്നു. സ്ക്രിപ്റ്റ് നിർത്തുകയോ വേരിയബിൾ നശിപ്പിക്കപ്പെടുകയോ ചെയ്യുന്നതുവരെ അങ്ങനെ സൃഷ്ടിച്ച വേരിയബിൾ മെമ്മറിയിൽ തുടരും.

$ unset LEVEL

BASH-ന് 50-ലധികം വേരിയബിളുകൾ മുൻകൂട്ടി നിശ്ചയിച്ചിട്ടുണ്ട്. ഈ വേരിയബിളുകളിൽ ചിലതിന് BASH-ന് ഒരു പ്രത്യേക അർത്ഥമുണ്ട്, ഉദാ., ഒരു വേരിയബിൾ RANDOM ഒരു റാൻഡം നമ്പർ ഔട്ട്പുട്ട് ചെയ്യുന്നു. ഇത് സജ്ജീകരിക്കാതെ വീണ്ടും നിർവചിച്ചാൽ, യഥാർത്ഥ വേരിയബിൾ മൂല്യം എന്നെന്നേക്കുമായി നഷ്ടപ്പെടും. അതിനാൽ സിസ്റ്റം നിർവചിച്ച വേരിയബിളുകളൊന്നും ഉപയോഗിക്കരുതെന്ന് നിർദ്ദേശിക്കുന്നു.

ചില ഉപയോഗപ്രദമായ BASH വേരിയബിളുകളുടെ ഒരു ലിസ്റ്റ് ഇതാ.

  1. ബാഷ്—ബാഷിന്റെ മുഴുവൻ പാതനാമം.
  2. BASH_ENV—ഒരു ഷെൽ സ്uക്രിപ്റ്റിൽ, സ്uക്രിപ്റ്റ് ആരംഭിക്കുന്നതിന് മുമ്പ് എക്uസിക്യൂട്ട് ചെയ്uത പ്രൊഫൈൽ ഫയലിന്റെ പേര്.
  3. BASH_VERSION—Bash-ന്റെ പതിപ്പ് (ഉദാഹരണത്തിന്, 2.04.0(1)-release).
  4. നിരകൾ—നിങ്ങളുടെ ഡിസ്പ്ലേയിലെ ഒരു വരിയിലെ പ്രതീകങ്ങളുടെ എണ്ണം (ഉദാഹരണത്തിന്, 80).
  5. HOSTNAME—കമ്പ്യൂട്ടറിന്റെ പേര്. ലിനക്സിന്റെ ചില പതിപ്പുകൾക്ക് കീഴിൽ, ഇത് മെഷീന്റെ പേരായിരിക്കാം. മറ്റുള്ളവയിൽ, ഇത് ഒരു പൂർണ്ണ യോഗ്യതയുള്ള ഡൊമെയ്ൻ നാമം ആകാം.
  6. HOSTTYPE—കമ്പ്യൂട്ടറിന്റെ തരം.
  7. ഹോം—നിങ്ങളുടെ ഹോം ഡയറക്uടറിയുടെ പേര്.
  8. OSTYPE—ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിന്റെ പേര്.
  9. PATH- എക്സിക്യൂട്ട് ചെയ്യാനുള്ള കമാൻഡ് കണ്ടെത്താനുള്ള തിരയൽ പാതകളുടെ കോളൻ-വേർതിരിച്ച ലിസ്റ്റ്.
  10. PPID—ഷെല്ലിന്റെ പാരന്റ് പ്രോസസിന്റെ പ്രോസസ്സ് ഐഡി.
  11. PROMPT_COMMAND—PS1 പ്രൈമറി പ്രോംപ്റ്റ് സ്uട്രിംഗിന്റെ ക്രമീകരണത്തിന് മുമ്പ് എക്uസിക്യൂട്ട് ചെയ്യാനുള്ള കമാൻഡ്.
  12. PWD—നിലവിലെ പ്രവർത്തിക്കുന്ന ഡയറക്uടറി (cd കമാൻഡ് പ്രകാരം സജ്ജമാക്കിയ പ്രകാരം).
  13. RANDOM—ഓരോ തവണയും റഫറൻസ് ചെയ്യുമ്പോൾ 0-നും 32767-നും ഇടയിലുള്ള ഒരു ക്രമരഹിത സംഖ്യ നൽകുന്നു.
  14. ഷെൽ—ഉപയോഗിക്കാൻ ഇഷ്ടപ്പെട്ട ഷെൽ; നിങ്ങൾക്കായി ഒരു ഷെൽ ആരംഭിക്കുന്ന പ്രോഗ്രാമുകൾക്കായി.
  15. TERM—ടെർമിനൽ എമുലേഷൻ തരം (ഉദാഹരണത്തിന്, കൺസോൾ).

വാക്ക് വിഭജനത്തിന്റെ നിയമം.

$ 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' ന് ശേഷമുള്ള സ്uപെയ്uസ് അവസാനിപ്പിക്കുന്നതായി എടുക്കുന്നു, അതിനാൽ വേരിയബിളിന്റെ മൂല്യം '0' ആയി സജ്ജീകരിച്ചിരിക്കുന്നു. ഇപ്പോൾ നമ്മൾ താഴെയുള്ള വേരിയബിളുകൾക്കായി ഉദ്ധരണി ഉപയോഗിക്കാൻ ശ്രമിക്കുന്നു.

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
$ printf "%s" $LEVEL 
0;1;2;3;4;5

എന്നിട്ടും ഫലം ശരിയായില്ല. ബാഷ് വേരിയബിൾ മൂല്യങ്ങൾ എടുക്കുകയും അവയ്ക്കിടയിലുള്ള എല്ലാ ഇടങ്ങളും നീക്കം ചെയ്യുകയും ചെയ്തു. അതിനാൽ printf 0,1,2,3,4,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.”

ഒറ്റ ഉദ്ധരണികൾ പ്രത്യേക പ്രതീകങ്ങൾ അച്ചടിക്കുന്നതിൽ നിന്ന് ബാഷിനെ പരിമിതപ്പെടുത്തുന്നു.

$ printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

ഒരു പ്രതീകത്തിനുള്ള ഒറ്റ ഉദ്ധരണി പോലെയാണ് ബാക്ക്സ്ലാഷ് പ്രവർത്തിക്കുന്നത്. നിങ്ങൾ എങ്ങനെ (\) പ്രിന്റ് ചെയ്യുമെന്ന് ചിന്തിച്ചിട്ടുണ്ടോ?

$ printf "%c" "\""

%q പ്രിന്റ്uഎഫ് ഉപയോഗിച്ച് ഗ്രൂപ്പുചെയ്യുമ്പോൾ, ഓരോ വാക്കിനുശേഷവും പദ സ്uപെയ്uസിംഗ് ഉറപ്പാക്കാൻ ബാക്ക്uസ്ലാഷ് നൽകുന്നു.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

ഇപ്പോഴത്തേക്ക് ഇത്രമാത്രം. ഞങ്ങളുടെ വായനക്കാർക്ക് എല്ലായ്uപ്പോഴും ഉപകാരപ്രദമായ ലേഖനങ്ങൾ നൽകാൻ ഞങ്ങൾ എപ്പോഴും ശ്രമിക്കുന്നു. മുകളിൽ വിവരിച്ച ലേഖനം വിശാലമാണ്, അതിനാൽ ഉദാഹരണങ്ങളുള്ള ബാക്കി വിഷയങ്ങൾ അടുത്ത ലേഖനത്തിൽ നിർമ്മിക്കുന്നതാണ്, അതിൽ 'വേരിയബിളിന്റെ ആട്രിബ്യൂട്ടുകൾ', 'വേരിയബിൾ എക്uസ്uപോർട്ടിംഗ്' മുതലായവ ഉൾപ്പെടുന്നു.

അതുവരെ തുടരുക, linux-console.net-ലേക്ക് കണക്uറ്റ് ചെയ്യുക. ചുവടെയുള്ള അഭിപ്രായ വിഭാഗത്തിൽ നിങ്ങളുടെ വിലയേറിയ ഫീഡ്uബാക്ക് ഞങ്ങൾക്ക് നൽകാൻ മറക്കരുത്.