Bash có một số lệnh được tích hợp sẵn trong shell (tức là built-in bên trong bash shell).
Khi bạn thực thi một lệnh built-in, bash shell sẽ thực thi nó ngay lập tức, không cần gọi bất kỳ chương trình nào khác.
Các lệnh built-in của Bash shell nhanh hơn các lệnh bên ngoài, vì các lệnh bên ngoài thường phải fork một tiến trình để thực thi.
Trong bài viết này, chúng ta sẽ xem xét một số lệnh built-in hữu ích của bash shell kèm theo ví dụ.
1. Ví Dụ Lệnh Export Bash
Lệnh export được dùng để xuất một biến hoặc hàm ra môi trường của tất cả các tiến trình con đang chạy trong shell hiện tại.
export varname=value
export -f functionname # xuất một hàm trong shell hiện tại
Nó xuất một biến hoặc hàm với một giá trị. Lệnh env liệt kê tất cả các biến môi trường. Trong ví dụ sau, bạn có thể thấy env hiển thị biến đã xuất.
$ export country=India $ env SESSIONNAME=Console country=India _=/usr/bin/env
Lệnh export -p cũng hiển thị tất cả các biến đã xuất trong shell hiện tại.
2. Ví Dụ Lệnh Eval Bash
Lệnh eval kết hợp tất cả các đối số cho trước và đánh giá biểu thức kết hợp, thực thi nó và trả về trạng thái thoát của lệnh đã thực thi.
$ 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
Đoạn mã trên chấp nhận một đối số, là mẫu cho lệnh grep. Nó liệt kê các tiến trình theo thứ tự sử dụng CPU và grep cho một mẫu cụ thể được đưa ra trong dòng lệnh.
Lưu ý: Bài viết này là một phần của loạt bài hướng dẫn Bash đang diễn ra.
3. Ví Dụ Lệnh Hash Bash
Lệnh hash duy trì một bảng băm, chứa tên đường dẫn của các lệnh đã sử dụng. Khi bạn thực thi một lệnh, nó tìm kiếm lệnh trong biến $PATH. Nhưng nếu lệnh có sẵn trong bảng băm, nó sẽ lấy từ đó và thực thi. Bảng băm lưu giữ số lần truy cập cho mỗi lệnh đã dùng cho đến nay trong shell đó.
$ hash hits command 1 /usr/bin/cat 2 /usr/bin/ps 4 /usr/bin/ls
Bạn có thể xóa một lệnh cụ thể khỏi bảng băm bằng tùy chọn -d, và tùy chọn -r để reset toàn bộ bảng băm.
$ hash -d cat $ hash hits command 2 /usr/bin/ps 4 /usr/bin/ls
4. Ví Dụ Lệnh Pwd Bash
pwd là một lệnh built-in của shell để in thư mục làm việc hiện về. Nó về cơ bản trả về giá trị của biến built-in ${PWD}.
$ pwd /home/sasikala/bash/exercises $ echo $PWD /home/sasikala/bash/exercises
5. Ví Dụ Lệnh Readonly Bash
Lệnh readonly được dùng để đánh dấu một biến hoặc hàm là chỉ đọc, không thể thay đổi thêm nữa.
$ cat readonly_ex.sh
#!/bin/bash
# Giới hạn một mảng là readonly
readonly -a shells=("ksh" "bash" "sh" "csh" );
echo ${#shells[@]}
# Thử sửa mảng, nó báo lỗi
shells[0]="gnu-bash"
echo ${shells[@]}
$ ./readonly_ex.sh
4
readonly_ex.sh: line 9: shells: readonly variable
6. Ví Dụ Lệnh Shift Bash
Lệnh shift được dùng để dịch các tham số vị trí sang trái N lần và đổi tên biến tương ứng sau khi dịch.
$ 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. Ví Dụ Lệnh Test Bash
Lệnh test đánh giá biểu thức điều kiện và trả về 0 hoặc 1 dựa trên kết quả đánh giá. Xem trang manual của bash để biết thêm các toán tử test.
#! /bin/bash if test -z $1 then echo "The positional parameter \$1 is empty" fi
8. Ví Dụ Lệnh Getopts Bash
Lệnh getopts được dùng để phân tích các đối số dòng lệnh cho trước. Chúng ta có thể định nghĩa quy tắc cho các tùy chọn, tức là tùy chọn nào chấp nhận đối số và tùy chọn nào không. Trong lệnh getopts, nếu một tùy chọn được theo sau bởi dấu hai chấm, thì nó mong đợi một đối số cho tùy chọn đó.
Getopts cung cấp hai biến $OPTIND và $OPTARG chứa chỉ số của tham số tiếp theo và đối số của tùy chọn tương ứng.
$ 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. Lệnh Logout Bash
Lệnh built-in logout dùng để thoát khỏi shell hiện tại.
10. Ví Dụ Lệnh Umask Bash
Lệnh umask thiết lập mặt nạ chế độ tạo file cho tiến trình hiện tại. Khi người dùng tạo một file, quyền mặc định của nó dựa trên giá trị được đặt trong umask. Quyền mặc định cho file là 666, và nó sẽ bị che khuất bằng các bit umask khi người dùng tạo file.
Chi tiết hơn xin tham khảo bài viết Quyền file và thư mục.
Khi người dùng tạo file, 666 bị che khuất với 022, nên quyền file mặc định sẽ là 644.
$ umask 0022 $ > temporary $ ls -l temporary -rw-r--r-- 1 root root 4 Jul 26 07:48 temporary
11. Ví Dụ Lệnh Set Bash
set là một lệnh built-in của shell, dùng để thiết lập và sửa đổi các biến nội bộ của shell. Lệnh set không có đối số sẽ liệt kê tất cả các biến và giá trị của chúng. Lệnh set cũng được dùng để thiết lập giá trị cho các tham số vị trí.
$ set +o history # Để vô hiệu hóa lưu lịch sử. +o vô hiệu hóa tùy chọn cho trước. $ set -o history # -o kích hoạt lịch sử $ 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. Ví Dụ Lệnh Unset Bash
Lệnh built-in unset được dùng để đặt biến shell về null. Unset cũng dùng để xóa một phần tử của mảng và xóa toàn bộ mảng.
Chi tiết về mảng Bash, xin tham khảo bài trước 15 Ví Dụ Mảng Bash.
$ cat unset.sh #!/bin/bash # Gán giá trị và in ra var="welcome to thegeekstuff" echo $var # unset biến unset var echo $var $ ./unset.sh welcome to thegeekstuff
Trong ví dụ trên, sau khi unset biến var sẽ được gán chuỗi null.
13. Ví Dụ Lệnh Let Bash
Lệnh let được dùng để thực hiện các phép toán số học trên các biến shell.
$ 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. Ví Dụ Lệnh Shopt Bash
Lệnh built-in shopt được dùng để thiết lập và hủy thiết lập các tùy chọn shell. Sử dụng lệnh này, bạn có thể tận dụng trí tuệ của shell.
$ cat shopt.sh #! /bin/bash ## Trước khi bật xpg_echo echo "WELCOME\n" echo "GEEKSTUF\n" shopt -s xpg_echo ## Sau khi bật xpg_echo echo "WELCOME\n" echo "GEEKSTUF\n" # Trước khi tắt aliases alias l.='ls -l .' l. # Sau khi tắt 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
Trước khi bật tùy chọn xpg_echo, câu lệnh echo không mở rộng các chuỗi thoát. l. được alias thành ls -l của thư mục hiện tại. Sau khi tắt tùy chọn expand_aliases trong shell, nó không mở rộng aliases, bạn có thể thấy lỗi l. command not found.
15. Ví Dụ Lệnh Printf Bash
Tương tự như printf trong ngôn ngữ C, printf built-in của bash được dùng để định dạng in ấn.
Trong ví dụ 13, script thực hiện phép toán số học trên hai đầu vào. Thay vì dùng câu lệnh echo, bạn có thể dùng câu lệnh printf để in đầu ra có định dạng như dưới đây.
Trong arith.sh, thay thế câu lệnh echo bằng câu lệnh printf này.
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