Bash में कई कमांड्स होते हैं जो शेल के साथ आते हैं (यानी bash शेल के अंदर बने होते हैं)।
जब आप एक बिल्ट-इन कमांड निष्पादित करते हैं, तो bash शेल इसे तुरंत निष्पादित करता है, बिना किसी अन्य प्रोग्राम को आमंत्रित किए।
Bash शेल बिल्ट-इन कमांड्स बाहरी कमांड्स की तुलना में तेज़ होते हैं, क्योंकि बाहरी कमांड्स आमतौर पर निष्पादित करने के लिए एक प्रक्रिया फोर्क करते हैं।
इस लेख में, आइए कुछ उपयोगी bash शेल बिल्ट-इन्स की समीक्षा करें व्यावहारिक उदाहरणों के साथ।
1. Bash Export कमांड उदाहरण
export कमांड का उपयोग किसी वेरिएबल या फ़ंक्शन को वर्तमान शेल में चल रही सभी चाइल्ड प्रक्रियाओं के वातावरण में निर्यात करने के लिए किया जाता है।
export varname=value
export -f functionname # वर्तमान शेल में एक फ़ंक्शन निर्यात करता है।
यह एक वेरिएबल या फ़ंक्शन को मान के साथ निर्यात करता है। "env" कमांड सभी पर्यावरण वेरिएबल्स को सूचीबद्ध करता है। निम्नलिखित उदाहरण में, आप देख सकते हैं कि env निर्यात किए गए वेरिएबल को प्रदर्शित करता है।
$ export country=India $ env SESSIONNAME=Console country=India _=/usr/bin/env
"export -p" कमांड वर्तमान शेल में सभी निर्यात किए गए वेरिएबल्स को भी प्रदर्शित करता है।
2. Bash eval कमांड उदाहरण
eval कमांड दिए गए सभी आर्ग्यूमेंट्स को जोड़ता है, संयुक्त एक्सप्रेशन का मूल्यांकन करता है और इसे निष्पादित करता है, और निष्पादित कमांड की एग्जिट स्थिति लौटाता है।
$ cat evalex.sh if [ ! -z $1 ] then proccomm="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | grep $1" else proccomm="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu" fi eval $proccomm
उपरोक्त कोड स्निपेट एक आर्ग्यूमेंट स्वीकार करता है, जो grep कमांड के लिए पैटर्न है। यह CPU उपयोग के क्रम में प्रक्रियाओं को सूचीबद्ध करता है और कमांड लाइन में दिए गए विशेष पैटर्न के लिए grep करता है।
नोट: यह लेख हमारे चल रहे Bash ट्यूटोरियल सीरीज़ का हिस्सा है।
3. Bash hash कमांड उदाहरण
hash कमांड एक हैश टेबल रखता है, जिसमें उपयोग की गई कमांड्स के पथ नाम होते हैं। जब आप एक कमांड निष्पादित करते हैं, तो यह $PATH वेरिएबल में कमांड की खोज करता है। लेकिन अगर कमांड हैश टेबल में उपलब्ध है, तो यह वहां से लेता है और इसे निष्पादित करता है। हैश टेबल उस शेल में अब तक उपयोग की गई प्रत्येक कमांड के लिए मिली हिट्स की संख्या रखता है।
$ hash hits command 1 /usr/bin/cat 2 /usr/bin/ps 4 /usr/bin/ls
आप -d विकल्प का उपयोग करके हैश टेबल से एक विशेष कमांड को हटा सकते हैं, और पूरी हैश टेबल को रीसेट करने के लिए -r विकल्प का उपयोग कर सकते हैं।
$ hash -d cat $ hash hits command 2 /usr/bin/ps 4 /usr/bin/ls
4. Bash pwd कमांड उदाहरण
pwd वर्तमान कार्य निर्देशिका को प्रिंट करने के लिए एक शेल बिल्ट-इन कमांड है। यह मूल रूप से बिल्ट-इन वेरिएबल ${PWD} का मान लौटाता है।
$pwd /home/sasikala/bash/exercises $echo $PWD /home/sasikala/bash/exercises
5. Bash readonly कमांड उदाहरण
readonly कमांड का उपयोग किसी वेरिएबल या फ़ंक्शन को रीड-ओनली के रूप में चिह्नित करने के लिए किया जाता है, जिसे आगे बदला नहीं जा सकता।
$ cat readonly_ex.sh #!/bin/bash # एक सरणी को रीड-ओनली के रूप में प्रतिबंधित करना readonly -a shells=("ksh" "bash" "sh" "csh" ); echo ${#shells[@]} # एक सरणी को संशोधित करने का प्रयास, यह एक त्रुटि फेंकता है shells[0]="gnu-bash" echo ${shells[@]} $ ./readonly_ex.sh 4 readonly_ex.sh: line 9: shells: readonly variable
6. Bash shift कमांड उदाहरण
shift कमांड का उपयोग स्थितिगत पैरामीटर्स को N बार बाएं शिफ्ट करने और शिफ्टिंग के बाद वेरिएबल को तदनुसार नाम बदलने के लिए किया जाता है।
$ cat shift.sh #! /bin/bash while [ $# -gt 0 ] do case "$1" in -l) echo "List command" ls shift ;; -p) echo "Process command" ps -a shift ;; -t) echo "Hash Table command" hash shift ;; -h) echo "Help command" help shift ;; esac done $./shift.sh -l -t List command analysis break testing t1.sh temp Hash Table command hits command 1 /usr/bin/ls
7. Bash test कमांड उदाहरण
test कमांड सशर्त एक्सप्रेशन का मूल्यांकन करता है और मूल्यांकन के आधार पर शून्य या एक लौटाता है। अधिक test ऑपरेटर्स के लिए bash के मैनुअल पेज देखें।
#! /bin/bash if test -z $1 then echo "The positional parameter \$1 is empty" fi
8. Bash getopts कमांड उदाहरण
getopts कमांड का उपयोग दिए गए कमांड लाइन आर्ग्यूमेंट्स को पार्स करने के लिए किया जाता है। हम विकल्पों के लिए नियम परिभाषित कर सकते हैं यानी कौन सा विकल्प आर्ग्यूमेंट्स स्वीकार करता है और कौन सा नहीं। getopts कमांड में, यदि एक विकल्प के बाद कोलन होता है, तो यह उस विकल्प के लिए एक आर्ग्यूमेंट की अपेक्षा करता है।
getopts दो वेरिएबल्स $OPTIND और $OPTARG प्रदान करता है जिनमें अगले पैरामीटर का इंडेक्स और विकल्प आर्ग्यूमेंट्स होते हैं।
$ cat options.sh #! /bin/bash while getopts :h:r:l: OPTION do case $OPTION in h) echo "help of $OPTARG" help "$OPTARG" ;; r) echo "Going to remove a file $OPTARG" rm -f "$OPTARG" ;; esac done $ ./options.sh -h jobs help of jobs jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args] Lists the active jobs. The -l option lists process id's in addition to the normal information; the -p option lists process id's only.
9. Bash logout कमांड
Logout बिल्ट-इन का उपयोग वर्तमान शेल से बाहर निकलने के लिए किया जाता है।
10. Bash umask कमांड उदाहरण
umask कमांड वर्तमान प्रक्रिया के लिए एक फ़ाइल मोड निर्माण मास्क सेट करता है। जब कोई उपयोगकर्ता एक फ़ाइल बनाता है, तो उसकी डिफ़ॉल्ट अनुमति umask में सेट मान पर आधारित होती है। फ़ाइल के लिए डिफ़ॉल्ट अनुमति 666 है, और जब उपयोगकर्ता एक फ़ाइल बनाता है तो इसे umask बिट्स के साथ मास्क किया जाता है।
अधिक विवरण के लिए कृपया हमारे लेख फ़ाइल और निर्देशिका अनुमतियाँ देखें।
जब उपयोगकर्ता एक फ़ाइल बनाता है तो 666 को 022 के साथ मास्क किया जाता है, इसलिए डिफ़ॉल्ट फ़ाइल अनुमति 644 होगी।
$ umask 0022 $ > temporary $ ls -l temporary -rw-r--r-- 1 root root 4 Jul 26 07:48 temporary
11. Bash set कमांड उदाहरण
set एक शेल बिल्ट-इन कमांड है, जिसका उपयोग शेल के आंतरिक वेरिएबल्स को सेट और संशोधित करने के लिए किया जाता है। आर्ग्यूमेंट के बिना set कमांड सभी वेरिएबल्स और उनके मानों को सूचीबद्ध करता है। set कमांड का उपयोग स्थितिगत पैरामीटर्स के लिए मान सेट करने के लिए भी किया जाता है।
$ set +o history # इतिहास संग्रहण को अक्षम करने के लिए। +o दिए गए विकल्पों को अक्षम करता है। $ set -o history -o इतिहास सक्षम करता है $ cat set.sh var="Welcome to thegeekstuff" set -- $var echo "\$1=" $1 echo "\$2=" $2 echo "\$3=" $3 $ ./set.sh $1=Welcome $2=to $3=thegeekstuff
12. Bash unset कमांड उदाहरण
unset बिल्ट-इन का उपयोग शेल वेरिएबल को null पर सेट करने के लिए किया जाता है। unset का उपयोग सरणी के एक तत्व को हटाने और पूरी सरणी को हटाने के लिए भी किया जाता है।
Bash सरणी पर अधिक विवरण के लिए, हमारे पहले के लेख 15 Bash Array Operations देखें।
$ cat unset.sh #!/bin/bash # मान निर्दिष्ट करें और प्रिंट करें var="welcome to thegeekstuff" echo $var # वेरिएबल को अनसेट करें unset var echo $var $ ./unset.sh welcome to thegeekstuff
उपरोक्त उदाहरण में, वेरिएबल "var" को अनसेट करने के बाद इसे null स्ट्रिंग असाइन किया जाएगा।
13. Bash let कमांड उदाहरण
let कमांड्स का उपयोग शेल वेरिएबल्स पर अंकगणितीय संचालन करने के लिए किया जाता है।
$ cat arith.sh #! /bin/bash let arg1=12 let arg2=11 let add=$arg1+$arg2 let sub=$arg1-$arg2 let mul=$arg1*$arg2 let div=$arg1/$arg2 echo $add $sub $mul $div $ ./arith.sh 23 1 132 1
14. Bash shopt कमांड उदाहरण
shopt बिल्ट-इन कमांड का उपयोग शेल विकल्पों को सेट और अनसेट करने के लिए किया जाता है। इस कमांड का उपयोग करके, आप शेल इंटेलिजेंस का उपयोग कर सकते हैं।
$cat shopt.sh #! /bin/bash ## xpg_echo को सक्षम करने से पहले echo "WELCOME\n" echo "GEEKSTUF\n" shopt -s xpg_echo ## xpg_echo को सक्षम करने के बाद echo "WELCOME\n" echo "GEEKSTUF\n" # aliases को अक्षम करने से पहले alias l.='ls -l .' l. # aliases को अक्षम करने के बाद shopt -u expand_aliases l. $ ./shopt.sh WELCOME\n GEEKSTUF\n WELCOME GEEKSTUF total 3300 -rw------- 1 root root 1112 Jan 23 2009 anaconda-ks.cfg -r-xr-xr-x 1 root root 3252304 Jul 1 08:25 backup drwxr-xr-x 2 root root 4096 Jan 26 2009 Desktop shopt.sh: line 17: l.: command not found
xpg_echo विकल्प को सक्षम करने से पहले, echo स्टेटमेंट एस्केप सीक्वेंस का विस्तार नहीं करता था। "l." को वर्तमान निर्देशिका के ls -l के लिए अलियास किया गया है। शेल में expand_aliases विकल्प को अक्षम करने के बाद, इसने aliases का विस्तार नहीं किया, आप l. कमांड नॉट फाउंड त्रुटि देख सकते हैं।
15. Bash printf कमांड उदाहरण
C भाषा में printf के समान, bash printf बिल्ट-इन का उपयोग फॉर्मेट प्रिंट संचालन के लिए किया जाता है।
उदाहरण 13 में, स्क्रिप्ट दो इनपुट्स पर अंकगणितीय संचालन करती है। उस स्क्रिप्ट में echo स्टेटमेंट के बजाय, आप फॉर्मेटेड आउटपुट प्रिंट करने के लिए printf स्टेटमेंट का उपयोग कर सकते हैं जैसा कि नीचे दिखाया गया है।
arith.sh में, echo स्टेटमेंट को इस printf स्टेटमेंट से बदलें।
printf "Addition=%d\nSubtraction=%d\nMultiplication=%d\nDivision=%f\n" $add $sub $mul $div $ ./arith.sh Addition=23 Subtraction=1 Multiplication=132 Division=1.000000