Các toán tử Shell cơ bản




Có rất nhiều toán tử được hỗ trợ bởi mỗi Shell. Phần hướng dẫn của chúng tôi dựa trên cơ sở Shell mặc định (Bourne) vì thế chúng ta đang bàn về các toán tử của Bourne shell trong chương này.

Có các toán tử sau mà chúng ta cần quan tâm:

  • Các toán tử số học

  • Các toán tử quan hệ

  • Các toán tử logic

  • Các toán tử chuỗi

  • Các toán tử kiểm tra file

Bourne shell lúc đầu không có bất cứ một kỹ thuật nào để trình bày số học đơn giản, nhưng nó sử dụng chương trình ngoại vi, hoặc là awk hoặc là chương trình đơn giản hơn expr.

Dưới đây là ví dụ đơn giản để cộng hai số:

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

Nó sẽ tạo ra kết quả sau:

Total value : 4

Những điểm mà bạn cần lưu ý là:

  • Phải có một khoảng trống giữa hai toán tử và 2 sự diễn đạt, ví dụ 2+2 là không đúng, nó nên được viết là 2 + 2.

  • Sự diễn đạt đầy đủ nên được bao quanh bởi ``, gọi là dấu phảy bị nghịch đảo.

Các toán tử số học trong Unix/Linux

Các toán tử số học sau được hỗ trợ bởi Bourne shell.

Giả sử biến a giữ giá trị 10 và biến b giữ giá trị 20, thì khi đó:

Ví dụ:

Toán tửMiêu tảVí dụ
+Phép cộng – thêm giá trị ở mỗi bên vào toán tử `expr $a + $b` kết quả là 30
-Phép trừ – trừ giá trị bên phải của toán tử bên trái `expr $a - $b` kết quả là -10
*Phép nhân – nhân giá trị ở trên mỗi bên với toán tử.`expr $a \* $b` kết quả là 200
/Phép chia – chia giá trị bên phải cho giá trị bên trái`expr $b / $a` kết quả là 2
%Lấy số dư – lấy phần còn lại sau khi đã chia giá trị trái cho giá trị bên phải `expr $b % $a` kết quả là 0
=Phép gán – gán toán hạng trái cho toán hạng phải a=$b sẽ gán giá trị của b cho a
==Phép bằng – so sánh hai số, nếu cả hai đều giống nhau thì kết quả trả về là true. [ $a == $b ] sẽ trả về kết quả False.
!=Phép không cân bằng – so sánh hai số, nếu cả hai số khác nhau thì giá trị trả về là true. [ $a != $b ] sẽ trả về kết quả True.

Nó là rất quan trọng để ghi nhớ rằng tại đây tất cả các sự diễn đạt có điều kiện sẽ được đặt trong hai dấu ngoặc ôm vuông ([]) với một dấu cách trống quanh chúng, ví dụ [$a == $b ] là đúng, và [$a==$b] là không đúng.

Tất cả các toán tử số học được thực hiện sử dụng các số nguyên dài.

Các toán tử quan hệ trong Unix/Linux

Bourne shell hỗ trợ các toán tử quan hệ sau mà là riêng với các giá trị số. Những toán tử này không làm việc cho chuỗi trừ khi giá trị của nó là số.

Ví dụ, các toán tử sau sẽ kiểm tra một quan hệ giữa 10 và 20, cũng là giữa "10" và "20" nhưng không giữa "ten" và "twenty'.

Giả sử biến a giữ giá trị 10 và biến b giữ giá trị 20 thì khi đó:

Ví dụ

Toán tửMiêu tảVí dụ
-eq Kiểm tra giá trị của hai toán hạng là cân bằng hoặc không, nếu có thì điều kiện trở lên đúng. [ $a -eq $b ] là không đúng.
-ne Kiểm tra giá trị của hai toán hạng là cân bằng hoặc không, nếu không cân bằng thì điều kiện trở lên đúng.[ $a -ne $b ] là đúng.
-gt Kiểm tra nếu giá trị của toán hạng trái lớn hơn giá trị của toán hạng phải, nếu đúng thì điều kiện trở nên đúng. [ $a -gt $b ] là không đúng.
-lt Kiểm tra nếu giá trị của toán hạng trái nhỏ hơn giá trị của toán hạng phải, nếu đúng thì điều kiện trở nên đúng. [ $a -lt $b ] là đúng.
-ge Kiểm tra nếu giá trị của toán hạng trái lớn hơn hoặc bằng giá trị của toán hạng phải, nếu đúng thì điều kiện trở nên đúng. [ $a -ge $b ] là không đúng.
-le Kiểm tra nếu giá trị của toán hạng trái nhỏ hơn hoặc bằng giá trị của toán hạng phải, nếu đúng thì điều kiện trở nên đúng. [ $a -le $b ] là đúng.

Nó là rất quan trọng để ghi nhớ rằng tại đây tất cả các sự diễn đạt có điều kiện sẽ được đặt trong dấu ngoặc ôm vuông ([]) với dấu cách trống quanh chúng, ví dụ [ $a <= $b ] là đúng và [$a<=$b] là không đúng.

Các toán tử logic trong Unix/Linux

Có các toán tử logic sau được hỗ trợ bởi Bourne Shell

Giả sử biến a giữ giá trị 10 và biến b giữ giá trị 20, thì dưới đây là ví dụ sử dụng tất cả các toán tử logic.

Ví dụ

Toán tửMiêu tảVí dụ
! Phép phủ định. Nếu điều kiện đúng thì giá trị là sai và ngược lại. [ ! false ] là true.
-oPhép hoặc. Nếu một trong các toán hạng là đúng thì điều kiện là đúng.[ $a -lt 20 -o $b -gt 100 ] là true.
-aPhép và. Nếu cả hai toán hạng đều đúng thì điều kiện là đúng, ngoài ra là sai..[ $a -lt 20 -a $b -gt 100 ] là false.

Các toán tử chuỗi trong Unix/Linux

Các toán tử chuỗi sau được hỗ trợ bởi Bourne Shell.

Giả sử biến a giữ giá trị "abc" và biến b giữ giá trị "efg":

Ví dụ

Toán tửMiêu tảVí dụ
= Kiểm tra nếu giá trị của hai toán hạng là cân bằng hoặc không, nếu có thì điều kiện là đúng. [ $a = $b ] là không đúng.
!= Kiểm tra nếu giá trị của hai toán hạng có cân bằng hoặc không, nếu không cân bằng thì điều kiện là đúng.[ $a != $b ] là đúng.
-z Kiểm tra nếu cỡ toán hạng chuỗi đã cho là 0. Nếu nó có độ dài là 0 thì nó trả về là đúng. [ -z $a ] là không đúng.
-n Kiểm tra nếu cỡ toán hạng chuỗi đã cho là khác 0. Nếu độ dài khác 0 thì nó trả về là đúng. [ -z $a ] là không đúng.
str Kiểm tra nếu str không là chuỗi trống. Nếu là chuỗi trống thì nó trả về là sai. [ $a ] là không sai.

Các toán tử kiểm tra file trong Unix/Linux

Các toán tử sau để kiểm tra các sở hữu cơ bản liên kết với một file Unix.

Giả sử một biến file giữ một tên file đang tồn tại là "test" với kích cỡ là 100 byte và được cho phép đọc, viết và chạy.

Ví dụ

Toán tửMiêu tảVí dụ
-b file Kiểm tra nếu file là một file khối đặc biệt, nếu đúng thì điều kiện là đúng. [ -b $file ] là sai.
-c file Kiểm tra nếu file là một file ký tự đặc biệt, nếu đúng thì điều kiện là đúng. [ -c $file ] là sai.
-d file Kiểm tra nếu file là một thư mục, nếu đúng thì điều kiện là đúng. [ -d $file ] là không đúng.
-f file Kiểm tra nếu file là file thường như trái ngược với thư mục hoặc là file đặc biệt, nếu đúng thì điều kiện là đúng. [ -f $file ] là đúng.
-g file Kiểm tra nếu file có ID nhóm thiết lập (SGID), nếu đúng thì điều kiện là đúng. [ -g $file ] là sai.
-k file Kiểm tra nếu file có thiết lập sticky bit, nếu đúng thì điều kiện là đúng. [ -k $file ] là sai.
-p file Kiểm tra nếu file là một pipe được đặt tên, nếu đúng thì điều kiện là đúng. [ -p $file ] là sai.
-t file Kiểm tra nếu ký hiệu để nhận diện file được mở và liên kết với một terminal, nếu đúng thì điều kiện là đúng. [ -t $file ] là sai.
-u file Kiểm tra nếu file có SUID, nếu đúng thì điều kiện là đúng. [ -u $file ] là sai.
-r file Kiểm tra nếu file là đọc được, nếu đúng thì điều kiện là đúng. [ -r $file ] là đúng.
-w file Kiểm tra nếu file là viết được, nếu đúng thì điều kiện là đúng. [ -w $file ] là đúng.
-x file Kiểm tra nếu file là chạy được, nếu đúng thì điều kiện là đúng. [ -x $file ] là đúng.
-s file Kiểm tra nếu file là chạy được, nếu đúng thì điều kiện là đúng. [ -s $file ] là đúng.
-e file Kiểm tra nếu file tồn tại, vẫn đúng ngay cả khi file là một thư mục nhưng tồn tại. [ -e $file ] là đúng.

Các toán tử C Shell trong Unix/Linux:

Sau đây là đường link miêu tả ngắn gọn về các toán tử C Shell.

Các toán tử C Shell

Các toán tử Korn Shell trong Unix/Linux:

Sau đây là đường link miêu tả ngắn gọn về các toán tử Korn Shell.

Các toán tử Korn Shell

Loạt bài hướng dẫn học UNIX cơ bản và nâng cao của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint.com

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: