Thứ Sáu, 28 tháng 7, 2023

Biến đặc biệt (Special Variables) trong Shell Script

Ở bài trước mình có đề cập đến biến đặc biệt (special variable) được thiết lập bởi SEO nhưng chưa giải thích rõ về nó, vậy thì trong bài này chúng ta cùng tìm hiểu thể loại biến này nhé.

Mục lục

  • 1. Special variables là gì?
  • 2. Hiểu rõ hơn về tham số $* và $@
    • Trường hợp $*
    • Trường hợp $@
  • 3. Lời kết

1. Special variables là gì?

Special variables là biến được sinh ra bởi shell, giá trị của nó sẽ được cấp phát dựa vào dữ liệu đầu vào của chương trình shell, hoặc dữ liệu của chính hệ thống Linux.

Ví dụ để xem ID của chương trình shell hiện tại thì bạn sẽ dùng biến có tên là $, và để lấy giá trị của một biến thì ta phải ký tự $ phía trước nữa nên chương trình sẽ như sau:

Bài viết này được đăng tại [tranvanbinh.vn]

1
echo $$

Dưới đây là bảng danh sách các loại biến mà bạn có thể sử dụng trong shell script.

BiếnMô tả
$0Lấy tên file hiện tại
$nTập tham số truyền vào script, tham số đầu tiên là $1, tham số hú hai là $2, .... tham số thú n là $n
$#Tổng các tham số truyền vào 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 của lệnh cuối cùng, chúng ta có hai trạng thái đó là 0 => thành công và 1 => thất bại.
$$ID của lệnh shell đang chạy
$!ID của lệnh shell trước

Ví dụ: Bạn tạo một file tên là special_var.sh, sau đó nhập chương trình script dưới đây.

1
2
3
4
5
6
echo "Ten file: $0"
echo "Tham so dau tien: $1"
echo "Tham so thu hai: $2"
echo "Quoted : $@"
echo "Quoted : $*"
echo "Tong tham so la: $#"

Bạn chạy lệnh sh special.sh Van Cuong thì kết quả sẽ như hình dưới đây.

Tạm thời bạn bỏ qua phần tham số truyền vào nhé (tham số chính là Van Cuong), phần này mình sẽ giới thiệu ở bài tiếp theo.

2. Hiểu rõ hơn về tham số $* và $@

Trong danh sách trên có hai tham số có cách sử dụng rất giống nhau đó là $* và $@, cả hai tham số cho phép truy cập tất cả các đối số cùng một lúc, về nguyên tắc thì hoạt động như nhau, tuy nhiên nếu các tham số có kèm dấu ngoặc kép thì hoạt động sẽ khác nhau.

Cả hai tham số đều xác định đối số của dòng lệnh, tuy nhiên tham số $* sẽ lấy toàn bộ danh sách dựa vào khoảng trắng của đối số truyền vào, còn $@ lấy toàn bộ danh sách và phân tách nó thành các đối số riêng biệt dựa vào khoảng trắng và kèm theo cặp nháy kép.

Giả sử bạn chạy lệnh sh special.sh Nguyễn "Văn Cường", lúc này ta sẽ có các trường hợp sử dụng sau:

Trường hợp $*

Chương trình
1
2
3
4
5
6
7
8
9
for VALUE in $*
do
echo $VALUE
done
 
for VALUE in "$*"
do
echo $VALUE
done

Kết quả:

1
2
3
4
5
6
7
Nguyễn
Văn
Cường
 
Nguyễn
Văn
Cường

Trường hợp $@

Chương trình
1
2
3
4
5
6
7
8
9
for VALUE in $@
do
echo $VALUE
done
 
for VALUE in "$@"
do
echo $VALUE
done

Kết quả:

1
2
3
4
5
6
Nguyễn
Văn
Cường
 
Nguyễn
Văn Cường

Dựa vào kết quả này ta rất dễ thấy sự khác biệt trong đó.

3. Lời kết

Như vậy special variable rất quan trọng phải không các bạn, nhất là việc xử lý tham số truyền vào chương trình shell.

Trong bài có sử dụng một số kiến thức chưa được học, vì vậy nếu bạn không hiểu thị tạm thời có thể bỏ qua, ở các bài sau học xong bạn quay lại sẽ thấy chúng rất dễ hiểu.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master