Các biến đặc biệt trong Unix/Linux
Chương hướng dẫn trước đã cảnh báo về sử dụng các ký tự đặc biệt trong tên biến của bạn. Điều này bởi vì những ký tự này được sử dụng trong tên các biến đặc biệt trong Unix. Những biến này được giữ cho các chức năng đặc biệt.
Ví dụ, ký tự $ đại diện cho số Process ID, hoặc PID của shell hiện tại.
$echo $$
Lệnh trên sẽ viết Process ID của shell hiện tại:
29949
Dưới đây là bảng liệt kê các biến đặc biệt mà bạn có thể sử dụng trong Shell script:
Biến | Miêu tả |
---|---|
$0 | Tên file của script hiện tại. |
$n | Những biến này tương ứng với các tham số mà một script được gọi. Tại đây n là số thập phân nguyên dương tương ứng với vị trí của một tham số (tham số đầu tiên là $1, tham số thứ hai là $2…). |
$# | Số các tham số cung cấp cho một script. |
$* | Tất cả các tham số được trích dẫn kép. Nếu một script nhận hai tham số, $* là tương đương với $1 $2. |
$@ | Tất cả các tham số được trích dẫn kép riêng rẽ. Nếu một script nhận 2 tham số, $@ là tương đương với $1 $2. |
$? | Trạng thái thoát ra của lệnh trước được chạy. |
$$ | Số tiến trình của shell hiện tại. Đối với Shell script, đây là số Process ID mà chúng đang chạy. |
$! | Số tiến trình của lệnh background trước. |
Các tham số dòng lệnh (command-line) trong Unix/Linux
Các biến dòng lệnh $1, $2, $3, …, $9 là các tham số vị trí, với $0 chỉ tới lệnh, chương trình, Shell script hoặc chức năng thực sự và $1, $2, $3, …, $9 là các tham số của lệnh đó.
Script dưới đây sử dụng các biến đặc biệt liên quan tới dòng lệnh:
#!/bin/sh echo "File Name: $0" echo "First Parameter : $1" echo "Second Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#"
Tại đây là một lần chạy mẫu cho script trên:
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2
Các tham số đặc biệt $* và $@ trong Unix/Linux
Có những tham số đặc biệt mà cho phép truy cập và tất cả các tham số của các dòng lệnh cùng một lúc. Cả $* và $@ sẽ hoạt động tương tự trừ khi chúng được bao quanh bởi trích dẫn ("").
Cả hai tham số xác định tất cả các tham số của dòng lệnh, nhưng $* nhận toàn bộ danh sách làm tham số với các khoảng cách trống ở giữa và $@ nhận toàn bộ danh sách làm tham số và phân biệt chúng thành các tham số riêng rẽ.
Chúng ta có thể viết Shell script như dưới để xử lý một số không biết các tham số dòng lệnh với hoặc tham số đặc biệt $* hoặc $@.
#!/bin/sh for TOKEN in $* do echo $TOKEN done
Chúng ta chạy mẫu cho script trên:
$./test.sh Zara Ali 10 Years Old Zara Ali 10 Years Old
Ghi chú: Tại đây do...done là một dạng của loop mà chúng ta sẽ bàn luận trong chương hướng dẫn sau.
Trạng thái thoát (Exit) trong Unix/Linux
Biến $? đại diện cho trạng thái thoát của lệnh trước.
Trạng thái thoát là một giá trị số trả về bởi mỗi lệnh khi nó hoàn tất. Theo quy định, hầu hết các lệnh trả về một trạng thái thoát là 0 nếu chúng thực hiện thành công và 1 nếu chúng không thành công.
Một vài lệnh trả về các trạng thái thoát với phần thêm vào khác vì các lý do riêng. Ví dụ, một số lệnh phân biệt giữa các loại lỗi và sẽ trả về các giá trị thoát đa dạng phụ thuộc vào kiểu của lỗi.
Dưới đây là các ví dụ về lệnh thực hiện thành công:
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.
Các bài học UNIX phổ biến khác tại VietJack:
- Quản lý File
- Thư mục
- Quyền truy cập File
- Cài đặt Unix/Linux
- Các tiện ích cơ bản
- Các Pipe & Bộ lọc (Filter)