Bài viết này sẽ giới thiệu các loại Biến Đặc Biệt Trong Linux Bash. Nếu bạn cần hỗ trợ, xin vui lòng liên hệ VinaHost qua Hotline 1900 6046 ext.3, email về support@vinahost.vn hoặc chat với VinaHost qua livechat https://livechat.vinahost.vn/chat.ph
1. Khái niệm
1.1. Các loại biến
Trong lập trình bash shell, có 2 loại biến cơ bản:
- Biến (Variables)
Tạo ra bởi user từ command-line hay shell script cho mục đích lưu trữ dữ liệu (string, integer, etc…), cần thiết cho quá trình xử lý của chương trình.
- Tham số đặc biệt (Special Parameters)
Tham số đặc biết là những tham số được định nghĩa trước trong bash và không thể thay đổi bởi user (read-only)
- Tham số vị trị (Positional Parameters)
Là các tham số được nhập trong quá trình gọi chương trình. Có thể nhận giá trị từ $1 đến $N với N là số nguyên. Trong trường hợp N có nhiều hơn một ký tự, ta có thể định nghĩa tham số vị trí như sau ${N}.
1.2. Tham số đặc biệt (Special Parameters)
Tham số |
Mô tả |
$* | Tham số chứa toàn bộ các tham số vị trí được nhập. |
$@ | Tương tự $* chứa toàn bộ các tham số vị trí. |
$# | Tổng số lượng tham số vị trí được nhập. |
$$ | Chứa giá trị Process ID (PID) của shell. |
$! | Chứa giá trị Process ID (PID) của process đã được thực thi ngầm trước đó. |
$? | Chứa giá trị trạng thái khi kết thúc của lệnh thực thi trước đó. |
$- | Trả về giá trị options được set trước đó với lệnh set tại shell hiện tại. |
$_ | Trả về giá trị tham số cuối cùng của lệnh được thực thi trước đó. |
2. Một số ví dụ
- Tham số ‘$#’ và ‘$@’.
Ví dụ:
$ cat special-param.sh echo So luong tham so nhap vao [\$\#]: $# echo “Danh sach tham so nhap vao:” for arg in $@; do printf ‘”%s”\n’ $arg done
Kết quả trả về:
$ ./special-param.sh vina host So luong tham so nhap vao [$#]: 2 Danh sach tham so nhap vao: “vina” “host”
-
- $# mang giá trị của số lượng tham số nhập vào,
- $@ là biến chứa toàn bộ giá trị tham số nhập vào.
- Tham số ‘$$’ và ‘$_’.
Ví dụ:
$ cat special-param.sh echo “Ten chuong trinh duoc thuc thi [\$_] = $_” touch /tmp/test.$$ ls -l /tmp/test.$$ cp /tmp/test.$$ /tmp/test.log echo “Tham so cuoi cung duoc nhap vao [\$_] = $_”
Kết quả trả về:
$ ./special-param.sh vina host Ten chuong trinh duoc thuc thi [$_] = ./special—param.sh -rw-rw-r—1 jame jame 0 Dec 18 19:11 /tmp/test.3245 Tham soo cuoi cung duoc nhap vao [$_] = /tmp/test.log
-
- $_ khi dùng tại đầu chương trình sẽ trả về tên chương trình thực thi, và khi dùng nơi khác trong script sẽ trả về giá trị cuối cùng của tham số được nhập vào.
- $$ trả về PID của shell thực thi chương trình hiện tại.
- Tham số ‘$?’.
Ví dụ:
$ cat special-param.sh /usr/local/bin/fakeprogram 2> /dev/null if [ “$?” -ne “0” ]; then echo “[*] Loi thuc thi chuong trinh, Hay thu kiem tra lai voi [\$?]” fi
Kết quả trả về:
$ cat special-param.sh [*] Loi thuc thi chuong trinh, Hay thu kiem tra lai voi [$?]
-
- $? Trả về giá trị trạng thái khi kết thúc của lệnh thực thi trước đó, cụ thể là lệnh /usr/local/bin/fakeprogram 2> /dev/null, do không có chương trình fakeprograme nên giá trị $? Sẽ là 1.
- Tham số ‘$-’.
$ echo $- himBH
Trả về giá trị options được set trước đó với lệnh set tại shell hiện tại.
H – histexpand
m – monitor
h – hashall
B – braceexpand
i – interactive
Chúc bạn thực hiện thành công!
THAM KHẢO CÁC DỊCH VỤ TẠI VINAHOST
>> SERVER – COLOCATION – CDN
>> HOSTING
>> WEBSITE
>> TÊN MIỀN