Header Ads Widget

Ticker

6/recent/ticker-posts

So sánh và kiểm tra trong Bash shell

Luồng điều khiển trong chương trình được xử lý bởi các mệnh đề so sánh và kiểm tra. Bash cung cấp cho chúng ta vài tùy chọn để thực hiện việc so sánh và kiểm tra này. Chúng ta có thể if, if else, và các phép toán luận lý để thực hiện các phép kiểm tra và các phép toán so sánh nhất định để so sánh các đối tượng dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu cách so sánh và kiểm tra trong Bash shell.

1. Kiểm tra trong Bash shell


Việc kiểm tra trong Bash shell được thực hiện bằng cấu trúc

[ condition ]

Cấu trúc trên sẽ trả về 1 trong 2 kết quả:

  • True => nếu condition đúng
  • False => nếu condition sai

2. if, if-else


ifif-else là các cấu trúc điều khiển luồng làm việc của chương trình, chúng thường được gọi là các cấu trúc điều kiện, tức là ứng với từng điều kiện thì chúng ta sẽ thực thi khối chương trình tương ứng cho điều kiện đó, trong trường hợp này chúng ta có 2 điều kiện là đúng (TRUE) và sai (FALSE). Cấu trúc if và if – else

if condition;
then
    commands;
fi

Nếu condition đúng thì thực hiện commands.

if condition;
then
    commands_01;
else
    commands_02;
fi

Nếu condition đúng thì thực hiện commands_01, ngược lại, nếu condition sai thì thực hiện commands_02. Chúng ta có thể sử dụng 2 cấu trúc if và if else lồng vào nhau như sau:

if condition;
then
    commands;
else if condition;
then
    commands;
else
    commands;
fi

Trong thực tế chúng ta thường kết hợp 2 cấu trúc kiểm tra và điều kiện vào nhau để thực hiện việc kiểm tra và thực thi luồng xử lý như sau:

if [ condition ];
then
    commands;
fi


if [ condition ];
then
    commands;
else
    commands;
fi

Hoặc chúng ta có thể viết ở dạng ngắn gọn như sau:

  • [ condition ] && action => thực hiện nếu điều kiện condition là đúng (TRUE).
  • [ condition ] || action => thực hiện nếu điều kiện condition là sai (FALSE).

Với && là phép toán luận lý AND và || là phép toán luận lý OR.

3. So sánh số học


Sử dụng các phép toán so sánh số học dưới đây bên trong cấu trúc kiểm tra [] ở phần 1.

  • -eq => Bằng nhau (Equal)
  • -ne => Không bằng nhau (Not equal)
  • -lt => Nhỏ hơn (Less than)
  • -gt => Lớn hơn (Greater than)
  • -le => Nhỏ hơn hoặc bằng (Less or equal)
  • -ge => Lớn hơn hoặc bằng (Greater or equal)

vd:

var=10
[ $var -eq 0 ] => FALSE

4. So sánh chuỗi


Sử dụng các cấu trúc sau để thực hiện việc so sánh chuỗi trong Bash shell

  • [[ $str1 = $str2 ]] hoặc [[ $str1 == $str2 ]]

Trả về TRUE nếu 2 biến str1 và str2 có nội dung giống nhau. FALSE nếu ngược lại.

  • [[ $str1 != $str2 ]]

Trả về TRUE nếu 2 biến str1 và str2 có nội dung giống nhau. FALSE nếu ngược lại.

  • [[ $str1 > $str2 ]]

Trả về TRUE nếu srt1 lớn hơn str2 tính theo bảng chữ cái. FALSE nếu ngược lại.

vd:

str1="HELLO"
str2="Hello"
[[ $str1 > $str2 ]] =>TRUE

  • [[ $str1 < $str2 ]]

Trả về TRUE nếu srt1 nhỏ hơn str2 tính theo bảng chữ cái. FALSE nếu ngược lại.

  • [[ -z $str1 ]]

Trả về TRUE nếu $str1 là 1 chuỗi rỗng. FALSE nếu ngược lại

  • [[ -n $str1 ]]

Trả về TRUE nếu $str1 là 1 chuỗi khác rỗng. FALSE nếu ngược lại.

Lưu ý:

  • Khi sử dụng dấu =, nếu trước và sau nó không có khoảng trắng thì khai báo đó sẽ được hiểu là phép gán.

vd:

var=”value”

  • Ngược lại, nếu trước và sau dấu = có khoảng trắng, thì khai báo đó được hiểu là phép so sánh

vd:

$var = “value”

5. Kiểm tra hệ thống tập tin


Sử dụng các phép toán kiểm tra hệ thống tập tin dưới đây bên trong cấu trúc kiểm tra [] ở phần 1.

  • [ -f $file_var]

Trả về TRUE nếu file_var là 1 tập tin.

  • [ -x $var ]

Trả về TRUE nếu var là tập tin và có quyền thực thi (executable)

  • [ -d $var ]

Trả về TRUE nếu var là 1 thư mục.

  • [ -e $var ]

Trả về TRUE nếu var tồn tại

  • [ -w $var ]

Trả về TRUE nếu var là 1 tập tin và có quyền ghi (writable)

  • [ -r $var ]

Trả về TRUE nếu var là 1 tập tin và có quyền đọc (readable)

  • [ -L $var ]

Trả về TRUE nếu var là 1 liên kết mềm (symlink)

vd:

fpath="/etc/passwd"
if [ -e $fpath ]; then
    echo File exists;
else
    echo Does not exist;
fi

6. Kết hợp nhiều phép kiểm tra với nhau


Chúng ta có thể kết hợp nhiều điều kiện kiểm tra với nhau bằng việc sử dụng các toán tử luận lý gồm:

  • AND hoặc &&  => Trả về TRUE  khi tất cả các điều kiện đều thỏa

vd:

str1="Not empty "
str2=""
if [[ -n $str1 ]] && [[ -z $str2 ]];
then
    echo TRUE
fi



  • OR hoặc || => Trả về TRUE khi 1 trong các điều kiện thỏa

vd:

str1="Not empty "
if [[ -n $str1 ]] || [[ -z $str1 ]];
then
    echo TRUE
fi

Chúng ta hoàn thành bài tìm hiểu về các so sánh và kiểm tra trong Bash shell tại đây. Chúc các bạn thành công!

Post a Comment

0 Comments