Bash มีคำสั่งหลายคำสั่งที่มาพร้อมกับเชลล์ (เช่น สร้างขึ้นภายใน bash shell)
เมื่อคุณรันคำสั่งในตัว bash shell จะรันคำสั่งนั้นทันที โดยไม่ต้องเรียกใช้โปรแกรมอื่น
คำสั่งในตัวของ Bash shell จะเร็วกว่าคำสั่งภายนอก เนื่องจากคำสั่งภายนอกมักจะแยกกระบวนการเพื่อดำเนินการ
ในบทความนี้ให้เราตรวจสอบ bash shell builtins ที่มีประโยชน์พร้อมตัวอย่าง
1. ตัวอย่างคำสั่งส่งออก Bash
คำสั่ง export ใช้เพื่อเอ็กซ์พอร์ตตัวแปรหรือฟังก์ชันไปยังสภาพแวดล้อมของโปรเซสลูกทั้งหมดที่ทำงานอยู่ในเชลล์ปัจจุบัน
export varname=value
export -f functionname # exports a function in the current shell.
มันส่งออกตัวแปรหรือฟังก์ชันด้วยค่า คำสั่ง “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 Tutorial Series ที่กำลังดำเนินการอยู่
3. ตัวอย่างคำสั่ง Bash hash
คำสั่ง hash รักษาตารางแฮชซึ่งมีชื่อพาธของคำสั่งที่ใช้ เมื่อคุณรันคำสั่ง มันจะค้นหาคำสั่งในตัวแปร $PATH
แต่ถ้าคำสั่งนั้นมีอยู่ในตารางแฮช คำสั่งนั้นจะหยิบขึ้นมาจากที่นั่นและดำเนินการคำสั่งนั้น ตารางแฮชจะรักษาจำนวน Hit ที่พบสำหรับแต่ละคำสั่งที่ใช้ในเชลล์นั้นจนถึงตอนนี้
$ 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 ใช้เพื่อทำเครื่องหมายตัวแปรหรือฟังก์ชันเป็นแบบอ่านอย่างเดียว ซึ่งไม่สามารถเปลี่ยนแปลงเพิ่มเติมได้
$ cat readonly_ex.sh #!/bin/bash # Restricting an array as a readonly readonly -a shells=("ksh" "bash" "sh" "csh" ); echo ${#shells[@]} # Trying to modify an array, it throws an error 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
คำสั่งทดสอบประเมินนิพจน์เงื่อนไขและส่งคืนศูนย์หรือหนึ่งตามการประเมิน ดูหน้าคู่มือของ 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
ล็อกเอาต์ในตัวใช้เพื่อออกจากเชลล์ปัจจุบัน
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 # To disable the history storing. +o disables the given options. $ set -o history -o enables the history $ 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 built-in ใช้เพื่อตั้งค่าตัวแปรเชลล์เป็น null unset ยังใช้เพื่อลบองค์ประกอบของอาร์เรย์และ
เพื่อลบอาร์เรย์ทั้งหมด
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ Bash Array โปรดดูบทความก่อนหน้า 15 Bash Array Operations
$ cat unset.sh #!/bin/bash #Assign values and print it var="welcome to thegeekstuff" echo $var #unset the variable unset var echo $var $ ./unset.sh welcome to thegeekstuff
ในตัวอย่างข้างต้น หลังจากยกเลิกการตั้งค่าตัวแปร “var” จะถูกกำหนดด้วยสตริงว่าง
13. Bash ให้ตัวอย่างคำสั่ง
คำสั่ง 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 ## Before enabling xpg_echo echo "WELCOME\n" echo "GEEKSTUF\n" shopt -s xpg_echo ## After enabling xpg_echo echo "WELCOME\n" echo "GEEKSTUF\n" # Before disabling aliases alias l.='ls -l .' l. # After disabling 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 ไม่ได้ขยายลำดับการหลบหนี “ล” นามแฝงเป็น ls -l ของไดเร็กทอรีปัจจุบัน หลังจากปิดการใช้งานตัวเลือก expand_aliases ในเชลล์ มันไม่ขยายนามแฝง คุณอาจสังเกตเห็นข้อผิดพลาด l ไม่พบคำสั่ง
15. ตัวอย่างคำสั่ง Bash printf
คล้ายกับ printf ในภาษา C 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