So sánh 2 phần tử trong mảng

Thứ tự từ điển là một kiến thức quan trọng khi học về xâu ký tự, bài viết này mình sẽ hướng dẫn các bạn cách xác định thứ tự từ điển giữa các xâu ký tự cũng như các hàm và toán tử trong string đã cung cấp sẵn

NỘI DUNG :

  • Thứ Tự Từ Điển [Lexicographically] Là Gì ?
  • Toán Tử So Sánh String Và Hàm Compare[]
  • Video Tutorial

1. Thứ Tự Từ Điển [Lexicographically] Là Gì ?

Thứ tự từ điển của xâu ký tự hiểu đơn giản là thứ tự abc trong bảng chữ cái, trong đó ký tự nào đứng trước trong bảng chữ cái sẽ có thứ tự từ điển nhỏ hơn.

Đối với chuỗi ký tự thì thứ tự từ điển của nó so với chuỗi ký tự khác được xác định bằng ký tự khác nhau đầu tiên của 2 xâu.

Về cơ bản thì $* và $@ giống nhau khi sử dụng với biến đơn không đặt trong dấu “”. Khi đặt vào trong dấu nháy kép “” thì:

  • $*: Các tham số đưa vào sẽ được nối thành một chuỗi và được phân cách nhau bởi dấu cách.
  • $@: Các tham số đưa vào sẽ được phân biệt một cách riêng lẽ từng tham số một.

Ví dụ khác nhau giữa $* và $@:

#!/bin/bash echo -e "Using "$":" for str in "$" do echo $str done echo -e "Using "$@":" for str in "$@" do echo $str done

Kết quả khi chạy script ./test.sh my name is Dang là:

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

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

  • Về cơ bản thì shell linux sử dụng các toán tử cơ bản như các ngôn ngữ lập trình khác như C/C++, Java,… Tuy nhiên với toán tử nhân khi sử dụng nên dùng \* để phân biệt với lệnh bất kỳ * của linux
  • Sử dụng cú pháp: expr op1 op2 [để trong 2 dấu “ ` ” không phải nháy đơn đây là để thực thi lệnh shell expr]

echo expr 2 + 3

sẽ hiển thị kết quả là 5

echo `expr 2 * 3’

kết quả là 2 * 3 = 6

  • Sử dụng cú pháp let “phép tính”

let “a=$a+3” let ”c=$a*$b”

Ngoài ra let có thể sử dụng các toán tử +=, -=, =+, =- khá tương tự như trong C/C++ và java

  • Sử dụng cú pháp: $[[…]]

Z=$[[$a + $b]] Z=$[[$a * $b]]

Kiểm tra điều kiện [condition]:

  • Có cấu trúc [ condition ]
  • Trả về giá trị có kiểu boolean [true / false]

ví dụ:

if [4 -eq 2]; then

echo True;  
else
echo False;  
fi

False

So sánh số học:

  • “-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]
  • “-o” => OR
  • “-a” => AND

Ví dụ:

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

So sánh chuỗi:

  • [[ $str1 = $str2 ]] hoặc [[ $str1 == $str2 ]]
  • [[ $str1 != $str2 ]]
  • [[ $str1 > $str2 ]]
  • [[ $str1 < $str2 ]]

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

  • [[ -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.

Kiểm tra tập tin:

  • [[ -f FILE ]] : Trả về TRUE nếu file_var là 1 tập tin.
  • [[ -x FILE ]]: Trả về TRUE nếu var là tập tin và có quyền thực thi [executable].
  • [[ -d FILE ]] : Trả về TRUE nếu var là 1 thư mục.
  • [[ -e FILE ]] : Trả về TRUE nếu var tồn tại.
  • [[ -w FILE ]] : Trả về TRUE nếu var là 1 tập tin và có quyền ghi [writable].
  • [[ -r FILE ]] : Trả về TRUE nếu var là 1 tập tin và có quyền đọc [readable].
  • [[ -h FILE ]] : Trả về TRUE nếu var là 1 liên kết mềm [symlink].
  • [[ -s FILE ]] : Trả về TRUE nếu file có dung lượng lớn hơn 0 bytes.
  • [[ FILE1 -ef FILE2 ]] : Trả về TRUE nếu cùng là 1 file.

ví dụ:

fpath="/etc/passwd" if [ -e $fpath ]; then

echo File exists;  
else
echo Does not exist;  
fi

mảng trong bash:

  • Cú pháp khai báo:

=[[giatri1] [giatri2] ... [giatrin]]

list=[coffee water beer]

  • Lấy số lượng phần tử của mảng:

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

0

  • Truy xuất phần tử trong mảng:

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

1

  • Tìm và thay thế phần tử trong mảng:

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

2

  • In tất cả phần tử, phân cách bởi space

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

3

  • Độ dài chuỗi của phần tử đầu tiên

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

4

  • Độ dài chuỗi của phần tử n

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

5

  • Lấy mảng con từ vị trí n với m phần tử.

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

6

  • Thêm phần tử [Push].

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

7

  • Xoá phần tử:

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

8

  • Tạo bản sao

Khi sử dụng “$*” thì các tham số được xem là một chuỗi phân biệt bởi khoảng trắng

Using "$*":

my name is Dang

Khi sử dụng “$@” thì các tham số được xem như các biến riêng lẽ được đặt trong một mảng

Using "$@":

my name is Dang

9

  • Nối mảng:

echo expr 2 + 3

sẽ hiển thị kết quả là 5

echo `expr 2 * 3’

kết quả là 2 * 3 = 6

0

  • Tạo mảng từ file

echo expr 2 + 3

sẽ hiển thị kết quả là 5

echo `expr 2 * 3’

kết quả là 2 * 3 = 6

1

Qua bài viết trên, chúng ta đã nắm được các toán tử cơ bản trong bash, cách thực hiện các phép tính toán, các phép so sánh số học và chuỗi, kiểu dữ liệu mảng [array]. Sau bài viết, các bạn hãy thực hành thêm về các toán tử cơ bản trên để nắm chắc về chúng nhé vì chúng sẽ hổ trợ rất nhiều cho chúng ta trong việc học tập lập trình ngôn ngữ Bash sau này đó. Bài viết sau, mình sẽ cùng các bạn tìm hiểu về các cấu trúc điều khiển và các toán tử xử lý chuỗi trong ngôn ngữ Bash.

Chủ Đề