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

Toán tử (Operators) trong Shell Script

 Ở các bài trước mình có sử dụng một số toán tử nhưng chưa giới thiệu về nó như toán tử cộng (+) trừ (-) nhân (\*) và chia (/), vậy thì trong bài này mình sẽ giới thiệu những toán tử căn bản thường dùng nhất trong Linux.

Có rất nhiều loại toán tử, và được chia thành các nhóm như toán tử toán học (Arithmetic Operators), toán tử quan hệ (Relational Operators), toán tử boolean (Boolean Operators), toán tử xử lý chuỗi (String Operators), toán tử xử lý file (File Test Operators) và cuối cùng là C Shell Operators và Korn Shell Operators.

Mục lục

  • 1. Khoảng trắng là quan trọng
  • 2. Arithmetic Operators - toán tử toán học
  • 3. Relational Operators - toán tử quan hệ
  • 4. Toán tử boolean
  • 5. String Operators - toán tử xử lý chuỗi
  • 6. File Test Operators - toán tử kiểm tra file
  • 7. Lời kết

1. Khoảng trắng là quan trọng

Trước khi đi vào tìm hiểu từng loại toán tử thì bạn phải hiểu khoảng trắng rất quan trọng khi lập trình shell script, nếu bạn chỉ vô tình thiếu khoảng trắng thôi cũng rất tai hại đấy.

Ví dụ: In ra tổng của 2 + 2

Bài viết này được đăng tại [free tuts .net]

Mình sẽ sử dụng lệnh expr để thực hiện tính toán trên số nguyên, xem hai cách dưới đây.

Cách 1
1
2
echo `expr 2+2`
2+2

Cách 2
1
2
echo `expr 2 + 2`
4

Trong hai ví dụ này khác nhau chỉ là khoảng trắng, nếu chạy thì kết quả cũng sẽ khác nhau:

  • Ở ví dụ 1 kết quả là 2+2 vì không có khoảng trắng nên lệnh expr sẽ trả về là lệnh nối chuỗi
  • Ở ví dụ 2 kết quả là 4 vì có khoảng trắng nên lệnh expr sẽ trả về kết quả là lệnh cộng hai số nguyên.

Như vậy bạn cần phải chú ý đến khoảng trắng kẻo viết nhầm nhé.

2. Arithmetic Operators - toán tử toán học

Toán tử toán học trong shell script cũng như ngôn ngữ khác, lui tới cũng là các phép toán thông thường.

Giả sử biến a có giá trị là 10, biến b có giá trị là 20 thì các toán tử sẽ được tính như bảng dưới đây.

OperatorDescriptionExample
+ (phép cộng)Cộng hai giá trị`expr $a + $b` => 30
- (phép trừ)Trừ hai giá trị`expr $a - $b` => -10
* (phép nhân)Nhân hai giá trị, phải thêm dấu \* vì * là ký tự đặc biệt trong linux`expr $a \* $b` => 200
/ (phép chua)Chia hai giá trị`expr $b / $a` => 2
% (phép chia lấy dư)Chia lấy dư`expr $b % $a` => 0
= (phép gán)Phép gána=$b sẽ gán giá trị của b vào a
== (phép so sánh bằng)Phép so sánh bằng[ $a == $b ] => false.
!= (phép so sánh không bằng)Phéo so sánh không bằng[ $a != $b ] => true

3. Relational Operators - toán tử quan hệ

Toán tử quan hệ là toán tử so sánh giá trị giữa hai biểu thức, biểu thức có thể là một giá trị đơn hoặc một biểu thức dài với nhiều phép toán trong đó.

Toán tử quan hệ thường được dùng trong các mệnh đề kiểm tra điều kiện, ví dụ mệnh đề if else, vòng lặp ... Bảng ví dụ dưới đây a sẽ có giá trị là 10 và b là 20.

OperatorDescriptionExample
-eqSo sánh bằng[ $a -eq $b ] => false
-neSo sánh không bằng[ $a -ne $b ] => true.
-gtSo sánh lớn hơn[ $a -gt $b ] => true.
-ltSo sánh bé hơn[ $a -lt $b ] => true.
-geSo sánh lớn hơn hoặc bằng[ $a -ge $b ] => false
-leSo sánh bé hơn hoặc bằng[ $a -le $b ] => true.

Lưu ý: Khoảng trắng là bắt buộc phải có nhé các bạn, nếu không sẽ bị báo lỗi sai hoặc cho kết quả không như mong đợi. Ví dụ [ $a -lt $b ] sẽ khác [$a -lt $b].

4. Toán tử boolean

Boolean là kiểu dữ liệu có một trong hai giá trị là đúng hoặc sai, tức true hoặc false. Bảng dưới đây a sẽ có giá trị là 10 và b là 20.

OperatorDescriptionExample
!Toán tử phủ định, phủ định true => false, phủ định false => true[ ! false ] => true.
-oToán tử hoặc (OR), trả về true khi một trong hai mệnh đề trái hoặc phải có giá trị true[ $a -lt 20 -o $b -gt 100 ] => true.
-aToán tử và (AND), trả về true khi cả hai mệnh đề trái và phải đều có giá tr[ $a -lt 20 -a $b -gt 100 ] => false.

5. String Operators - toán tử xử lý chuỗi

Khi làm việc với chuỗi đôi khi ta cũng cần phải so sánh, ví dụ khi đăng nhập ta sẽ so sánh chuỗi tên đăng nhập và chuỗi mật khảu có đúng không, nếu đúng thì thành công và sai thì thất bại.

Bảng ví dụ dưới đây a sẽ có giá trị là 'abc' và b là 'efg'.

OperatorDescriptionExample
=So sánh hai chuỗi bằng nhau hay không[ $a = $b ] => false
!=So sánh hai chuỗi khác nhau hay không[ $a != $b ] => true.
-zKiểm tra chiều dài chuỗi có bằng 0 hay không (chuỗi rỗng)[ -z $a ] => false
-nKiểm tra chiều dài chuỗi có lớn hơn 0 hay không[ -n $a ] => true
strKiểm tra chuỗi str có khác rỗng hay không[ $a ] => true

6. File Test Operators - toán tử kiểm tra file

Hầu hết linux được sử dụng làm server nên việc xử lý file là rất thường xuyên, nhất là khi bạn dùng VPS.

Bạn sẽ cần một số toán tử đặc biệt dùng để kiểm tra file như kiểm tra định dạng, đường dẫn, kích thước file ... Khi sử dụng các toán tử này bạn phải chú ý đến quyền của file có hợp lệ hay không.

Bảng ví dụ dưới đây file sẽ có tên là test, kích thước là 100mb, và có đầy đủ quyền readwriteexecute.

OperatorDescriptionExample
-b fileKiểm tra có phải là file khối đặc biệt[ -b $file ] => false.
-c fileKiểm tra có phải file là file ký tự đặc biệt[ -c $file ] => false.
-d fileKiểm tra file có phải là một thư mục[ -d $file ] => false
-f fileKiểm tra có phải là một file thông thường[ -f $file ] => true.
-g fileKiểm tra file có được thiết lập group ID (SGID)[ -g $file ] => false.
-k fileKiểm tra file có được thiết lập sticky bit[ -k $file ] => false.
-p fileKiểm tra file có phải là file named pipe[ -p $file ] => false.
-t fileKiểm tra trạng thái của file có đang mở bởi một terminal hay không[ -t $file ] => false.
-u fileKiẻm tra file có được thiết lập User ID (SUID)[ -u $file ] => false.
-r fileKiểm tra user có quyền đọc file hay không[ -r $file ] => true.
-w fileKiểm tra user có quyền write trên file hay không[ -w $file ] => true.
-x fileKiểm tra user có quyền execute file không[ -x $file ] => true.
-s fileKiểm tra kích thước file có lớn hơn 0 hay không[ -s $file ] => true.
-e fileKiểm tra file có tồn tại hay không[ -e $file ] => true.

7. Lời kết

Như vậy là mình đã giới thiệu xong các toán tử thường dùng trong Unix/Linux, các toán tử này thường được sử dụng rất nhiều nên khi bạn lập trình nhiều sẽ tự nhớ, bạn không cần phải học thuộc, khi nào quên thì hãy vào bài này để xem lại là ok.

=============================
* 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