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ụ:

#!/bin/sh
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
   echo "a is equal to b"
fi
if [ $a != $b ]
then
   echo "a is not equal to b"
fi

Nó sẽ cho kết quả sau:

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a is not equal to b

 

Toán tửMiêu tả
+Phép cộng – thêm giá trị ở mỗi bên vào toán tử
-Phép trừ – trừ giá trị bên phải của toán tử bên trái
*Phép nhân – nhân giá trị ở trên mỗi bên với toán tử.
/Phép chia – chia giá trị bên phải cho giá trị bên trái
%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
=Phép gán – gán toán hạng trái cho toán hạng phải
==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.
!=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.


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ố. 

Toán tửMiêu tảVí dụ
-eqKiể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.
-neKiể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.
-gtKiể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.
-ltKiể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.
-geKiể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.
-leKiể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

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

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

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. 

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.
-zKiể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.
-nKiể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.
strKiể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. 

Toán tửMiêu tảVí dụ
-b fileKiể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 fileKiể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 fileKiể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 fileKiể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 fileKiể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 fileKiể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 fileKiể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 fileKiể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 fileKiểm tra nếu file có SUID, nếu đúng thì điều kiện là đúng.[ -u $file ] là sai.
-r fileKiểm tra nếu file là đọc được, nếu đúng thì điều kiện là đúng.[ -r $file ] là đúng.
-w fileKiểm tra nếu file là viết được, nếu đúng thì điều kiện là đúng.[ -w $file ] là đúng.
-x fileKiểm tra nếu file là chạy được, nếu đúng thì điều kiện là đúng.[ -x $file ] là đúng.
-s fileKiểm tra nếu file là chạy được, nếu đúng thì điều kiện là đúng.[ -s $file ] là đúng.
-e fileKiể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.


Bình luận