Unix / Linux - Shell Basic Operators
Xin chào, những người đam mê lập trình! Tôi rất vui mừng được hướng dẫn các bạn vào thế giới kỳ diệu của các toán tử shell Unix/Linux. Là một người đã dạy khoa học máy tính hơn một thập kỷ, tôi có thể đảm bảo rằng việc thành thạo các toán tử này sẽ là một bước ngoặt trong hành trình lập trình của bạn. Hãy cùng tìm hiểu!
Toán tử số học
Toán tử số học là nền tảng của các phép toán toán học trong lập trình shell. Chúng cho phép chúng ta thực hiện các phép toán cơ bản trong các script của mình.
Dưới đây là bảng các toán tử số học phổ biến nhất:
Toán tử | Mô tả | Ví dụ |
---|---|---|
+ | Cộng | expr $a + $b |
- | Trừ | expr $a - $b |
* | Nhân | expr $a \* $b |
/ | Chia | expr $a / $b |
% | Modulo | expr $a % $b |
= | Gán | a=$b |
Hãy xem một ví dụ thực tế:
#!/bin/bash
a=10
b=5
echo "Cộng: `expr $a + $b`"
echo "Trừ: `expr $a - $b`"
echo "Nhân: `expr $a \* $b`"
echo "Chia: `expr $a / $b`"
echo "Modulo: `expr $a % $b`"
Trong script này, chúng ta sử dụng lệnh expr
để thực hiện các phép toán số học. Dấu backtick () được sử dụng để thực thi lệnh
expr` và thay thế kết quả của nó.
Khi bạn chạy script này, bạn sẽ thấy:
Cộng: 15
Trừ: 5
Nhân: 50
Chia: 2
Modulo: 0
Nhớ rằng, trong lập trình shell, khoảng trắng rất quan trọng. expr$a+$b
sẽ không hoạt động, nhưng expr $a + $b
sẽ. Đó là như cho các biến của bạn không gian để thở!
Toán tử quan hệ
Toán tử quan hệ được sử dụng để so sánh các giá trị. Chúng rất quan trọng để tạo điều kiện trong script của bạn.
Dưới đây là bảng các toán tử quan hệ:
Toán tử | Mô tả | Ví dụ |
---|---|---|
-eq | Bằng | [ $a -eq $b ] |
-ne | Không bằng | [ $a -ne $b ] |
-gt | Lớn hơn | [ $a -gt $b ] |
-lt | Nhỏ hơn | [ $a -lt $b ] |
-ge | Lớn hơn hoặc bằng | [ $a -ge $b ] |
-le | Nhỏ hơn hoặc bằng | [ $a -le $b ] |
Hãy xem chúng trong hành động:
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a là bằng $b"
elif [ $a -gt $b ]
then
echo "$a là lớn hơn $b"
else
echo "$a là nhỏ hơn $b"
fi
Script này so sánh a
và b
sử dụng các toán tử quan hệ. Khi bạn chạy nó, bạn sẽ thấy:
10 là nhỏ hơn 20
Mẹo nhỏ: Hãy nghĩ về các toán tử này như là đang hỏi câu hỏi. "-eq" là như đang hỏi "Có bằng không?", "-gt" là hỏi "Có lớn hơn không?". Việc verbalize các so sánh này khi bạn viết script sẽ giúp bạn rất nhiều.
Toán tử boolean
Toán tử boolean cho phép chúng ta kết hợp nhiều điều kiện. Chúng giống như chất keo logic của script của bạn.
Dưới đây là bảng các toán tử boolean:
Toán tử | Mô tả | Ví dụ |
---|---|---|
! | NOT | [ ! false ] |
-o | OR | [ $a -lt 20 -o $b -gt 100 ] |
-a | AND | [ $a -lt 20 -a $b -gt 100 ] |
Hãy sử dụng chúng trong một script:
#!/bin/bash
a=10
b=20
if [ $a -lt 20 -a $b -gt 15 ]
then
echo "Cả hai điều kiện đều đúng"
else
echo "Ít nhất một điều kiện là sai"
fi
Khi bạn chạy script này, bạn sẽ thấy:
Cả hai điều kiện đều đúng
Tôi thích nghĩ về các toán tử boolean như là công cụ quyết định. Chúng giúp script của bạn đưa ra quyết định dựa trên nhiều yếu tố, giống như chúng ta làm trong cuộc sống thực tế!
Toán tử chuỗi
Toán tử chuỗi được sử dụng để so sánh và manipulates chuỗi văn bản. Chúng vô cùng hữu ích khi làm việc với dữ liệu văn bản.
Dưới đây là bảng các toán tử chuỗi:
Toán tử | Mô tả | Ví dụ |
---|---|---|
= | Bằng | [ $a = $b ] |
!= | Không bằng | [ $a != $b ] |
-z | Chuỗi là null | [ -z $a ] |
-n | Chuỗi là không null | [ -n $a ] |
str | Chuỗi không rỗng | [ $a ] |
Hãy xem chúng trong hành động:
#!/bin/bash
a="Hello"
b="World"
if [ $a = $b ]
then
echo "Chuỗi là bằng"
elif [ -z $a ]
then
echo "Chuỗi a là rỗng"
elif [ -n $b ]
then
echo "Chuỗi b không rỗng"
else
echo "Không có điều kiện nào trên là đúng"
fi
Khi bạn chạy script này, bạn sẽ nhận được:
Chuỗi b không rỗng
Toán tử chuỗi giống như các quy tắc ngữ pháp của lập trình shell. Chúng giúp bạn hiểu được văn bản mà script của bạn đang làm việc.
Toán tử kiểm tra tệp
Toán tử kiểm tra tệp được sử dụng để kiểm tra các điều kiện khác nhau của tệp. Chúng rất quan trọng khi script của bạn cần tương tác với các tệp và thư mục.
Dưới đây là bảng một số toán tử kiểm tra tệp phổ biến:
Toán tử | Mô tả | Ví dụ |
---|---|---|
-d tệp | Thư mục tồn tại | [ -d $file ] |
-f tệp | Tệp tồn tại và là tệp thường | [ -f $file ] |
-r tệp | Tệp có thể đọc | [ -r $file ] |
-w tệp | Tệp có thể ghi | [ -w $file ] |
-x tệp | Tệp có thể thi hành | [ -x $file ] |
-s tệp | Tệp không có kích thước zero | [ -s $file ] |
Hãy sử dụng chúng trong một script:
#!/bin/bash
file="/etc/passwd"
if [ -f $file ]
then
echo "Tệp tồn tại"
if [ -r $file ]
then
echo "Tệp có thể đọc"
fi
if [ -w $file ]
then
echo "Tệp có thể ghi"
fi
if [ -x $file ]
then
echo "Tệp có thể thi hành"
fi
else
echo "Tệp không tồn tại"
fi
Khi bạn chạy script này, bạn có thể thấy điều gì đó như:
Tệp tồn tại
Tệp có thể đọc
Toán tử kiểm tra tệp giống như công cụ thám tử của script của bạn. Chúng giúp script của bạn hiểu những gì nó có thể và không thể làm với các tệp khác nhau.
Toán tử C Shell
C Shell (csh) có bộ toán tử riêng mà hơi khác so với Bourne Shell. Dưới đây là một số ví dụ:
#!/bin/csh
set a = 10
set b = 20
if ($a == $b) then
echo "a bằng b"
else if ($a != $b) then
echo "a không bằng b"
endif
if ($a > $b) then
echo "a lớn hơn b"
else if ($a < $b) then
echo "a nhỏ hơn b"
endif
Trong C Shell, chúng ta sử dụng ==
cho sự bằng và !=
cho sự không bằng. Chúng ta cũng có thể sử dụng trực tiếp >
và <
cho so sánh.
Toán tử Korn Shell
Korn Shell (ksh) kết hợp các tính năng từ cả Bourne Shell và C Shell. Dưới đây là một ví dụ:
#!/bin/ksh
a=10
b=20
if ((a == b))
then
print "a bằng b"
elif ((a != b))
then
print "a không bằng b"
fi
if ((a > b))
then
print "a lớn hơn b"
elif ((a < b))
then
print "a nhỏ hơn b"
fi
Trong Korn Shell, chúng ta có thể sử dụng ((
và ))
cho các phép toán số học và so sánh, điều này làm cho cú pháp sạch sẽ và trực quan hơn.
Nhớ rằng, việc thực hành là cách tốt nhất để trở nên hoàn hảo! Đừng ngần ngại thử nghiệm với các toán tử này trong script của riêng bạn. Mỗi lần bạn sử dụng chúng, bạn sẽ trở nên thoải mái và thành thạo hơn. Chúc bạn lập trình vui vẻ!
Credits: Image by storyset