ഷെൽ സ്ക്രിപ്റ്റിംഗിൽ ലിനക്സ് വേരിയബിളുകൾ മനസ്സിലാക്കുകയും എഴുതുകയും ചെയ്യുക - ഭാഗം 10


ലിനക്സ് ഷെൽ സ്ക്രിപ്റ്റിംഗ് ഭാഷ എല്ലായ്പ്പോഴും ഒരു ചർച്ചാ വിഷയമാണ്, ഭാവിയിൽ അത് എപ്പോഴും ഉണ്ടായിരിക്കും. ഷെൽ സ്ക്രിപ്റ്റിംഗ് ലാംഗ്വേജ് മാന്ത്രികമാണ്, മറ്റേതൊരു ഭാഷയിലേയും പോലെ സ്ക്രിപ്റ്റിംഗ് ഭാഷയിൽ ഒരു പ്രോഗ്രാം ചെയ്യാൻ വളരെ എളുപ്പമാണ്. എന്നിരുന്നാലും, നമ്മൾ എന്താണ് ചെയ്യുന്നതെന്നും അതിന്റെ ഫലം എന്താണ് പ്രതീക്ഷിക്കുന്നത് എന്നതിനെക്കുറിച്ചും ആഴത്തിലുള്ള അറിവ് ആവശ്യമാണ്.

ഞങ്ങളുടെ വായനക്കാർക്കായി ഞങ്ങൾ എഴുതിയ എല്ലാ ഷെൽ സ്uക്രിപ്റ്റിംഗ് ലേഖനങ്ങളും അവസാനത്തെ \ലിനക്സ് വേരിയബിളുകളുടെ ഒരു ഉൾക്കാഴ്ച ഉൾപ്പെടെ വളരെ വിലമതിക്കപ്പെടുന്നു. അവസാന ലേഖനം ഞങ്ങൾ ഒരു പുതിയ തലത്തിലേക്ക് വിപുലീകരിക്കുകയാണ്.

വേരിയബിൾ ആട്രിബ്യൂട്ടുകൾ

ലിനക്സ് എൻവയോൺമെന്റിലെ ഓരോ വേരിയബിളിനും ചില ഓപ്ഷനുകൾ ഉണ്ട്, അവയെ 'ആട്രിബ്യൂട്ടുകൾ' എന്ന് വിളിക്കുന്നു. ഈ ഓപ്uഷനുകളോ ആട്രിബ്യൂട്ടുകളോ \declare എന്ന കമാൻഡ് ഉപയോഗിച്ച് സാഹചര്യത്തിനനുസരിച്ച് ആവശ്യമുള്ളപ്പോൾ ഓണും ഓഫ് ആക്കാവുന്നതാണ്.

വേരിയബിൾ ആട്രിബ്യൂട്ടിന്റെ ഒരു ഉദാഹരണം '-i' എന്ന സ്വിച്ച് ഉപയോഗിക്കുന്നതാണ്, അത് അനുബന്ധ വേരിയബിളിനായി പൂർണ്ണസംഖ്യ ആട്രിബ്യൂട്ട് ഓണാക്കും. ‘-i’ മാറാൻ ഒരു നോൺ-ന്യൂമെറിക് മൂല്യം നൽകിയാലും, അത് ഒരു പിശക് സന്ദേശം എറിയുകയും ‘0’ പൂർണ്ണസംഖ്യ വ്യാഖ്യാനമായി ഔട്ട്uപുട്ട് ചെയ്യുകയും ചെയ്യില്ല. ചുവടെയുള്ള ഉദാഹരണത്തിൽ നിന്ന് ഇവിടെ ഇത് കൂടുതൽ വ്യക്തമാകും.

ഒരു വേരിയബിൾ ഇന്റിജർ പ്രഖ്യാപിക്കുക, ബിൽ = 121

[email :~$ declare -i bill=121

വേരിയബിൾ ബില്ലിന്റെ മൂല്യം പ്രിന്റ് ചെയ്യുക.

[email :~$ printf "%d\n" "$bill" 

121

വേരിയബിൾ മൂല്യം ഒരു സ്ട്രിംഗ് ആയിരിക്കട്ടെ. വേരിയബിൾ ബിൽ ഇതിനകം പ്രഖ്യാപിച്ചു, അത് രണ്ടാം തവണ പ്രഖ്യാപിക്കേണ്ടതില്ല. വേരിയബിളിന്റെ മൂല്യം ഇങ്ങനെ മാറ്റുക.

[email :~$ bill=tecmint

ഇപ്പോൾ, വേരിയബിൾ ബില്ലിന്റെ മൂല്യം വീണ്ടും പ്രിന്റ് ചെയ്യുക.

[email :~$ printf "%d\n" "$bill" 

0

പിശക് സന്ദേശത്തിന്റെ സ്ഥാനത്ത് ‘0’ ശ്രദ്ധിക്കുക.

[email :~$ declare -p bill 

declare -i bill="121"

ഇവിടെ, ഒരു -p (പ്രിന്റ് എന്നതിന്റെ അർത്ഥം) സ്വിച്ച് രക്ഷയ്ക്കായി വരുന്നു.

ഒരു വേരിയബിളിന്റെ ഓഫ് ആട്രിബ്യൂട്ടുകൾ മാറുന്നതിന്, സ്വിച്ചിന് തൊട്ടുമുമ്പ് ഒരു + (കൂടുതൽ) ചിഹ്നം ഇടുക എന്നതാണ് വേണ്ടത്. ചുവടെയുള്ള ഉദാഹരണത്തിൽ നിന്ന് ഇത് കൂടുതൽ വ്യക്തമാണ്.

മുകളിലുള്ള വേരിയബിളിന്റെ പൂർണ്ണസംഖ്യ ആട്രിബ്യൂട്ട് ഓഫ് ചെയ്യുക.

[email :~$ declare +i bill

വേരിയബിളിന്റെ മൂല്യം പരിശോധിക്കുക.

[email :~$ printf "%d\n" "$bill" 

bash: printf: bill: invalid number
0

ഇപ്പോൾ സ്വിച്ച് സ്ട്രിംഗ് ഉപയോഗിച്ച് വേരിയബിളിന്റെ മൂല്യം പ്രിന്റ് ചെയ്യുക.

[email :~$ printf "%s\n" "$bill" 

tecmint

ഇവിടെ മുകളിലെ ഉദാഹരണത്തിൽ, ബാഷിന് നോൺ-ന്യൂമറിക് മൂല്യത്തെ പിശകായി വിലയിരുത്താൻ കഴിഞ്ഞില്ല, എന്നിരുന്നാലും printf ഒരു സംഖ്യ ആയിരിക്കാം, എന്തായിരിക്കരുത് എന്ന് വ്യാഖ്യാനിക്കുന്നു.

വായന-മാത്രം വേരിയബിളുകൾ

റീഡ് ഒൺലി മെമ്മറി (ROM) നിങ്ങൾ കേട്ടിരിക്കാം, എന്നാൽ എന്താണ് റീഡ്-ഒൺലി വേരിയബിൾ? ഇതിന് റോമുമായി എന്തെങ്കിലും സാമ്യമുണ്ടോ?

റീഡ്-ഒൺലി മെമ്മറി പോലെയുള്ള നന്നായി വായിക്കാൻ മാത്രമുള്ള വേരിയബിളുകൾ അസൈൻ ചെയ്uതാൽ അതിന്റെ മൂല്യം മാറ്റാൻ കഴിയില്ല. അതിനാൽ ഇതിനെ റീഡ്-ഒൺലി എന്ന് വിളിക്കുന്നു. ആ വേരിയബിളിനായി നിങ്ങൾക്ക് ഒരു പുതിയ മൂല്യം എഴുതാനോ എഡിറ്റ് ചെയ്യാനോ പരിഷ്ക്കരിക്കാനോ കഴിയില്ല. ഉദാഹരണം ഉപയോഗിച്ചുള്ള ഒരു ചിത്രീകരണം ഇതാ.

ഒരു വായന മാത്രം (-r) വേരിയബിൾ നാമം ഡീകാൾ ചെയ്യുക, അതിന്റെ മൂല്യം \linux-console.net ആണ്.

[email :~$ declare -r name="linux-console.net"

മുകളിൽ പ്രഖ്യാപിച്ച വേരിയബിളിന്റെ മൂല്യം പ്രിന്റ് ചെയ്യുക.

[email :~$ printf "%s\n" "$name" 

linux-console.net

വേരിയബിളിന്റെ മൂല്യം മാറ്റാൻ ശ്രമിക്കുക.

[email :~$ declare -r name="Avishek" 

bash: declare: name: readonly variable

മുകളിൽ ചർച്ച ചെയ്തതുപോലെ, '+' ചിഹ്നം ഉപയോഗിച്ച് ഒരു വായന-മാത്രം വേരിയബിളിന്റെ ആട്രിബ്യൂട്ടുകൾ മാറ്റാവുന്നതാണ്.

ലിനക്സിൽ വേരിയബിളുകൾ എക്സ്പോർട്ട് ചെയ്യുന്നു

ഒരു ഷെൽ സ്ക്രിപ്റ്റിൽ പ്രഖ്യാപിച്ചിട്ടുള്ള എല്ലാ ഷെൽ വേരിയബിളുകളും സ്ക്രിപ്റ്റ് പ്രവർത്തിക്കുന്നത് വരെ ലഭ്യമാണ്. സ്ക്രിപ്റ്റിന് പുറത്ത് സ്ക്രിപ്റ്റിൽ നിന്നുള്ള വേരിയബിൾ നിലവിലില്ല. സ്ക്രിപ്റ്റിന് പുറത്ത് വേരിയബിളുകൾ ലഭ്യമാക്കുന്ന പ്രക്രിയയെ എക്സ്പോർട്ടിംഗ് വേരിയബിളുകൾ എന്ന് വിളിക്കുന്നു.

നിങ്ങൾ കയറ്റുമതി ചെയ്യാൻ ആഗ്രഹിക്കുന്ന ഷെല്ലിനെ അംഗീകരിക്കുന്ന സ്വിച്ച് declare -x (കയറ്റുമതി) ഉപയോഗിച്ച് ഷെല്ലിന് പുറത്ത് ഒരു വേരിയബിൾ കയറ്റുമതി ചെയ്യാൻ കഴിയും. ഒരു ഡിക്ലയർ എക്uസ്uപോർട്ട് സ്വിച്ച് ആയി ഉപയോഗിക്കാം.

[email :~$ declare -x variable=”Constant_Value”

സ്uക്രിപ്റ്റ് പ്രവർത്തിക്കുമ്പോൾ വേരിയബിളിൽ വരുത്തിയ എല്ലാ മാറ്റങ്ങളും സ്uക്രിപ്റ്റിന് പുറത്ത് വേരിയബിൾ എക്uസ്uപോർട്ട് ചെയ്യുമ്പോൾ നഷ്uടമാകും. ഷെൽ സ്ക്രിപ്റ്റിംഗിൽ എക്uസ്uപോർട്ടിംഗ് വേരിയബിൾ വളരെ പ്രധാനമാണ്.

സ്ക്രിപ്റ്റിന് പുറത്ത് വായിക്കാൻ മാത്രമുള്ളതും ലഭ്യമായതുമായ ഒരു വേരിയബിൾ ലഭിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു, ഒരേ സമയം സ്വിച്ച് -r ഉപയോഗിക്കുകയും -x മാറുകയും വേണം.

[email :~$ declare -rx variable=”Constant_Value”

പരിസ്ഥിതി വേരിയബിളുകൾ

പ്രോഗ്രാമും അവ എക്സിക്യൂട്ട് ചെയ്യുന്ന പ്രോഗ്രാമും തമ്മിൽ പങ്കിടുന്ന വേരിയബിളുകൾ. എൻവയോൺമെന്റ് വേരിയബിളുകൾ എക്uസ്uപോർട്ടുചെയ്യാനാകുമെങ്കിലും ആട്രിബ്യൂട്ടുകൾ അതിലേക്ക് അസൈൻ ചെയ്യാൻ കഴിയില്ല.

മേൽപ്പറഞ്ഞ സിദ്ധാന്തം പ്രായോഗികമായി മനസ്സിലാക്കുക. ഇവിടെ നമുക്ക് 0.sh, 1.sh എന്നീ രണ്ട് സ്ക്രിപ്റ്റുകൾ ഉണ്ട്.

# 0.sh
#!/bin/bash 
declare -rx name=Tecmint 
bash 0.sh 
exit 0

പിന്നെ രണ്ടാമത്തെ തിരക്കഥ.

# 1.sh
#!/bin/bash 
printf "%s\n" "$name" 
name=linux-console.net 
printf "%s\n" "$name"
exit 0

ഇവിടെ എന്താണ് നടക്കുന്നത്, ഒരു വേരിയബിൾ (പേര്) വായിക്കാൻ മാത്രമായി പ്രഖ്യാപിക്കുകയും എക്uസ്uപോർട്ടുചെയ്യുകയും ചെയ്യുന്നു, അതിനുശേഷം ഉടൻ തന്നെ രണ്ടാമത്തെ സ്uക്രിപ്റ്റ് വിളിക്കുന്നു.

ആദ്യത്തെ printf സ്റ്റേറ്റ്uമെന്റിൽ എക്uസ്uപോർട്ട് ചെയ്uത ആദ്യത്തെ സ്uക്രിപ്റ്റിൽ നിന്ന് വേരിയബിൾ രണ്ടാമത്തെ സ്uക്രിപ്റ്റ് പ്രിന്റ് ചെയ്uതു. രണ്ടാമത്തെ printf പ്രസ്താവനയിൽ, 'name' എന്ന വേരിയബിളിന് നൽകിയിരിക്കുന്ന പുതിയ മൂല്യം ഇത് കാണിക്കുന്നു.

വിഷമിക്കേണ്ടതില്ല, വേരിയബിൾ റീഡ്-ഒൺലി ആയിരുന്നു, അത് എങ്ങനെ വീണ്ടും അസൈൻ ചെയ്യാം. \സ്ക്രിപ്റ്റ് പ്രവർത്തിക്കുമ്പോൾ വേരിയബിളിൽ വരുത്തിയ എല്ലാ മാറ്റങ്ങളും സ്ക്രിപ്റ്റിന് പുറത്ത് വേരിയബിൾ എക്സ്പോർട്ട് ചെയ്യുമ്പോൾ നഷ്ടപ്പെടും എന്ന് നിങ്ങൾ ഓർക്കുന്നില്ലേ.

declare കമാൻഡ് താഴെയുള്ള എല്ലാ സ്വിച്ചുകളെയും അവയുടെ സംയോജനത്തോടൊപ്പം അനുവദിക്കുന്നു.

  1. -a : ഒരു അറേ പ്രഖ്യാപിക്കുന്നു.
  2. -f : പ്രദർശന പ്രവർത്തനവും നിർവചനവും.
  3. -F : ഡിസ്പ്ലേ ഫംഗ്ഷൻ നാമം.
  4. -r : വേരിയബിൾ വായിക്കാൻ മാത്രമായി പ്രഖ്യാപിക്കുക.
  5. -x : വേരിയബിൾ എക്uസ്uപോർട്ടബിൾ ആയി പ്രഖ്യാപിക്കുക.
  6. -I : വേരിയബിളിനെ പൂർണ്ണസംഖ്യയായി പ്രഖ്യാപിക്കുക.

ഇപ്പോഴത്തേക്ക് ഇത്രമാത്രം. അടുത്ത ലേഖനത്തിൽ, ഈ വിഷയം അവസാനിപ്പിക്കുന്നതിന് മുമ്പ്, 'eval' കമാൻഡ് ഉപയോഗിച്ച് വേരിയബിളുകൾ മാറ്റിസ്ഥാപിക്കുന്നതിനുള്ള വഴികളും ബാഷിൽ ഇതിനകം നിർവചിച്ചിരിക്കുന്ന വേരിയബിളുകളും ഞങ്ങൾ ചർച്ച ചെയ്യും. സ്uക്രിപ്റ്റിംഗിന്റെ ആഴത്തിലുള്ള നിങ്ങളുടെ യാത്ര നിങ്ങൾ ആസ്വദിക്കുന്നുണ്ടെന്ന് പ്രതീക്ഷിക്കുന്നു. അതുവരെ തുടരുകയും linux-console.net-ലേക്ക് കണക്uറ്റ് ചെയ്യുകയും ചെയ്യുക.