Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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.

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

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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
echo `expr 2+2`
2+2

Cách 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.

Operator Description Example
+ (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án a=$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.

Operator Description Example
-eq So sánh bằng [ $a -eq $b ] => false
-ne So sánh không bằng [ $a -ne $b ] => true.
-gt So sánh lớn hơn [ $a -gt $b ] => true.
-lt So sánh bé hơn [ $a -lt $b ] => true.
-ge So sánh lớn hơn hoặc bằng [ $a -ge $b ] => false
-le So 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.

Operator Description Example
! Toán tử phủ định, phủ định true => false, phủ định false => true [ ! false ] => true.
-o Toá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.
-a Toá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'.

Operator Description Example
= 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.
-z Kiểm tra chiều dài chuỗi có bằng 0 hay không (chuỗi rỗng) [ -z $a ] => false
-n Kiểm tra chiều dài chuỗi có lớn hơn 0 hay không [ -n $a ] => true
str Kiể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 read, write, execute.

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

Cùng chuyên mục:

Cách dùng lệnh Users trong Linux để xem user đang online

Cách dùng lệnh Users trong Linux để xem user đang online

Nếu bạn đang là quản trị viên thì việc quản lý thông tin / xem…

Cách sử dụng lệnh Wall trong Linux

Cách sử dụng lệnh Wall trong Linux

Wall là một công cụ dòng lệnh giúp hiển thị thông báo đến tất cả…

Cách dùng lệnh Whereis trong Linux

Cách dùng lệnh Whereis trong Linux

Whereis là một tiện ích dòng lệnh command line, nó cho phép bạn tìm ..

Cách sử dụng lệnh Which trong Linux

Cách sử dụng lệnh Which trong Linux

Linux dùng lệnh which để xác định vị trí file thực thi của lệnh mà…

Cách sử dụng lệnh whoami trong Linux

Cách sử dụng lệnh whoami trong Linux

Giống như tên gọi của nó, lệnh whoami in tên người dùng đang chạy ...

Cách dùng lệnh zcat trong Linux

Cách dùng lệnh zcat trong Linux

Mặc dù tính năng nén file rất hữu ích vì nó giúp ta tiết kiệm…

Hiểu rõ hơn về chmod 777 trong Linux

Hiểu rõ hơn về chmod 777 trong Linux

Bạn đang xây dựng một website và sử dụng tính năng upload ...

Cách sử dụng lệnh tail trong Linux

Cách sử dụng lệnh tail trong Linux

Mặc định thì lệnh tail sẽ hiển thị 10 dòng cuối cùng của file, thông…

Cách sử dụng lệnh Head trong Linux

Cách sử dụng lệnh Head trong Linux

Trong quá trình quản trị dữ liệu trên Linux đôi khi bạn muốn xem nhanh…

Cách sử dụng lệnh Whatis trong Linux

Cách sử dụng lệnh Whatis trong Linux

Trong bài này chúng ta sẽ tìm hiểu lệnh whatis trong ...

Cách sử dụng lệnh kill trong Linux

Cách sử dụng lệnh kill trong Linux

Linux là một hệ điều hành rất nhanh nhưng không phải lúc nào nó không…

Cách dùng lệnh who trong Linux

Cách dùng lệnh who trong Linux

Who là một công cụ dòng lệnh command-line, được ...

Cách dùng lệnh basename trong Linux

Cách dùng lệnh basename trong Linux

basename là một tiện ích dòng lệnh (command line) dùng để lấy ...

Cách sử dụng lệnh gzip trên Linux

Cách sử dụng lệnh gzip trên Linux

Gzip là một trong những thuật toán nén file phổ biến nhất, nó cho phép…

Cách dùng lệnh wait trong Linux

Cách dùng lệnh wait trong Linux

Wait là lệnh dùng để đợi một thời gian cho tới khi công việc nào…

Cách dùng lệnh ping trong Linux

Cách dùng lệnh ping trong Linux

Lệnh ping là một trong những công cụ được sử dụng nhiều nhất để khắc…

Cách dùng lệnh sleep trong Linux

Cách dùng lệnh sleep trong Linux

sleep là một tiện ích command line cho phép lập trình viên ..

Các ví dụ học Bash Script trong Linux cơ bản nhất

Các ví dụ học Bash Script trong Linux cơ bản nhất

Bash Script đuọc xem là mã code lập trình trên Linux ...

Vòng lặp until trong Shell Script

Vòng lặp until trong Shell Script

Vòng lặp while trong Shell Script

Vòng lặp while trong Shell Script

Trong Linux script, vòng lặp while được sử dụng trong ...

Top