So sánh 2 string bash shell

Bài viết này giới thiệu các bạn về cách lập trình bash shell siêu cơ bản trên hệ điều hành Linux, giới thiệu với cách bạn về chức năng và cách sử dụng của lập trình bash shell để các bạn có thể tự tìm hiểu và tự học Linux cơ bản dễ dàng hơn.

1. Giới thiệu về lập trình bash shell

So sánh 2 string bash shell

Shell script là một chương trình được sử dụng cho nhiều mục đích khác nhau, chẳng hạn như thực thi lệnh shell, chạy nhiều lệnh cùng nhau, tùy chỉnh các tác vụ quản trị, thực hiện tự động hóa,... mà bạn thường xuyên thực hiện trên máy tính của mình.

Shell script cho phép chúng ta lập trình các lệnh theo một chuỗi và hệ thống sẽ thực thi chúng. Viết shell script cho phép bạn sử dụng các chức năng lập trình như các vòng lặp for, các câu lệnh if/then/else... Shell script có sẵn trên hầu hết các bản phân phối Linux, trên MacOS và Cygwin trên Windows.

Shell script chỉ là các tập tin văn bản đơn giản. Bạn có thể sử dụng bất kỳ trình soạn thảo văn bản để viết như: vim, nano, gedit, emacs, vscode,...

Tiện ích của shell script:

  • Nó có thể nhận đầu vào từ người dùng, tệp, hoặc kết quả từ màn hình.
  • Giúp cho chúng ta có thể tạo nhóm lệnh riêng.
  • Shell script giúp chúng ta tiết kiệm thời gian.
  • Có khả năng thực hiện tự động một số công việc mà bạn thường xuyên trên máy tính của mình.

2. Các khái niệm cơ bản khi viết bash shell

Các tập lệnh được lưu trữ dưới dạng các tập tin chúng ta có thể đặt tên tùy ý cho tập lệnh shell. Nhưng điều quan trọng đầu tiên là nó cần bắt đầu với một

NUMBER=1999
name=blogd.net

4 ngay dòng đầu tiên:

#!/bin/bash

Tiếp theo thì nó phải là một tập tin thực thi. Để có thể phân quyền cho tập tin là thực thi thì chúng ta sử dụng lệnh

NUMBER=1999
name=blogd.net

5:

chmod u+x myscript

Lệnh trên giúp cho tập tin

NUMBER=1999
name=blogd.net

6 của chúng ta có thể thực thi được cho người dùng của bạn.

Bạn có thể thực thi tập lệnh nếu bạn đang ở trong cùng một thư mục bằng cách gọi nó

NUMBER=1999
name=blogd.net

7 hoặc sử dụng đường dẫn đầy đủ đến nó.

Ngoài cách thực thi trên chúng ta có thể sử dụng lệnh

NUMBER=1999
name=blogd.net

8 để thực thi cú pháp như sau:

bash duong-dan-file-script

Ví dụ 1: Sử dụng tính năng chú thích trong bash shell

Chú thích là một trong những điều quan trọng nhất khi viết chương trình. Một dòng bắt đầu bằng ký tự

NUMBER=1999
name=blogd.net

9 là một chú thích (ngoại trừ dòng

NUMBER=1999
name=blogd.net

4 ở trên).

#!/bin/bash
# this is a comment

Một bình luận cũng có thể bắt đầu ở cuối dòng:

#!/bin/bash
echo myscript # this is a comment

Ví dụ 2: Biến và toán tử trong bash shell

Chúng ta có thể đặt biến bằng cách sử dụng toán tử

echo $NUMBER
echo $name

1 cú pháp như sau:

name=value

Ví dụ:

NUMBER=1999
name=blogd.net

Sau khi đặt biến chúng ta có thể in một biến bằng cách sử dụng lệnh

echo $NUMBER
echo $name

2 và thêm một ký tự

echo $NUMBER
echo $name

3 tiếp theo là tên biến:

echo $NUMBER
echo $name

Bash shell sử dụng một số toán tử số học thường được dùng trên các ngôn ngữ lập trình:

Toán tửÝ nghĩa

echo $NUMBER
echo $name

4Cộng vào

echo $NUMBER
echo $name

5Trừ ra

echo $NUMBER
echo $name

6Nhân

echo $NUMBER
echo $name

7Chia

echo $NUMBER
echo $name

8Phép chia lấy phần dư

echo $NUMBER
echo $name

9Tính luỹ thừa

echo $NUMBER
echo $name

1Gáng giá trị

Chúng ta có thể so sánh các giá trị bằng cách sau:

Phép so sánhÝ nghĩa

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

1 hoặc

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

2Bé hơn

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

3 hoặc

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

4Bé hơn bằng

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

5 hoặc

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

6Lớn hơn

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

7 hoặc

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

8Lớn hơn bằng

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

9 hoặc

[root@localhost ~]# echo $$
6565

0Bằng nhau

[root@localhost ~]# echo $$
6565

1Không bằng

Ví dụ sử dụng so sánh giá trị trong bash shell:

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

Toán tử logic:

  • [root@localhost ~]# echo $$ 6565

    2 logic và
  • [root@localhost ~]# echo $$ 6565

    3 logic hoặc

Ví dụ 3: Các biến đặc biệt trong Linux. Các biến này được dành riêng cho các chức năng cụ thể.

Ký tự

echo $NUMBER
echo $name

3 đại diện cho số ID tiến trình, hoặc PID.

[root@localhost ~]# echo $$
6565

Bảng sau đây thống kê một số biến đặc biệt mà bạn có thể sử dụng trong lập trình bash shell:

BiếnÝ nghĩa

[root@localhost ~]# echo $$
6565

5Tên tập tin của tập lệnh hiện tại.

[root@localhost ~]# echo $$
6565

6Các biến này tương ứng với các đối số mà tập lệnh được gọi. Ở đây n là số nguyên dương tương ứng với vị trí của một đối số (đối số thứ nhất là $1, đối số thứ hai là $2,...).

[root@localhost ~]# echo $$
6565

7Số lượng đối số được cung cấp cho một tập lệnh.

[root@localhost ~]# echo $$
6565

8Tất cả các đối số được trích dẫn gấp đôi.

[root@localhost ~]# echo $$
6565

9Tất cả các đối số được trích dẫn riêng lẻ.

chmod u+x myscript

00Trạng thái thoát của lệnh cuối cùng được thực thi.

chmod u+x myscript

01Số tiến trình của lệnh nền cuối cùng.

Ví dụ 1: Sử dụng các biến đặc biệt như

[root@localhost ~]# echo $$
6565

5,

[root@localhost ~]# echo $$
6565

6,

[root@localhost ~]# echo $$
6565

7,

[root@localhost ~]# echo $$
6565

9,

[root@localhost ~]# echo $$
6565

8:

chmod u+x myscript

0

Chạy tập tin bash chúng ta được kết quả như sau:

chmod u+x myscript

1

Ví dụ 2: Kết hợp tham số đặc biệt

chmod u+x myscript

07 và

chmod u+x myscript

08 với dòng lặp for như sau:

chmod u+x myscript

2

Chạy tập lệnh shell chúng ta được kết quả như bên dưới:

chmod u+x myscript

3

Ví dụ 3: Trạng thái thoát của lệnh cuối cùng được thực thi:

chmod u+x myscript

4

Chạy tệp với lệnh bash:

chmod u+x myscript

5

Theo mặc định thì hầu hết các lệnh được thực hiện thành công thì trả về một trạng thái thoát là 0 và 1 nếu chúng không thành công.

3. Sử dụng bash shell

3.1. Sử dụng bash shell in ra màn hình

Chạy lệnh sau từ thiết bị đầu cuối để thực hiện một câu lệnh bash rất đơn giản. Đầu ra của lệnh sẽ là

chmod u+x myscript

09.

chmod u+x myscript

6

Nhưng khi chúng ta cần thực hiện in ra màn hình nhiều đầu ra và thực hiện thường xuyên thì việc gõ lệnh trên bash rất tốn thời gian vì vậy chúng ta sẽ tạo một bash shell in ra màn hình, khi cần chúng ta chỉ cần chạy file bash shell đó. Các bước như sau:

Đầu tiên chúng ta sử dụng trình soạn thảo để tạo một tập tin bash. Ở đây chúng ta dùng trình soạn thảo văn bản vi được để tạo tập tin và tên tập tin được đặt là

chmod u+x myscript

10:

chmod u+x myscript

7

Thêm tập lệnh sau vào tập tin test.sh và lưu tập tin:

chmod u+x myscript

8

Để có thể chạy tập tin bash chúng ta có thể chạy bằng 2 cách sau:

  • Chạy tập tin bash bằng cách sử dụng lệnh

    NUMBER=1999 name=blogd.net

    8:

    chmod u+x myscript

    9
  • Chạy tập tin bash bằng cách thiết lập quyền thực thi đối với tập tin bash và chạy tập tin:

    bash duong-dan-file-script

    0

Ví dụ 1: Sử dụng chú thích trong bash shell biểu tượng

NUMBER=1999
name=blogd.net

9 được sử dụng để thêm chú thích dòng đơn trong tập lệnh bash. Tạo một tập tin mới có tên

chmod u+x myscript

13 và thêm tập lệnh sau với nhận xét dòng đơn.

bash duong-dan-file-script

1

Chạy tập tin với lệnh

NUMBER=1999
name=blogd.net

8.

bash duong-dan-file-script

2

Ví dụ 2: Chúng ta có thể sử dụng chú thích nhiều dòng trong bash theo nhiều cách khác nhau. Tạo một bash mới có tên

chmod u+x myscript

15 và thêm tập lệnh sau. Ở đây biểu tượng

chmod u+x myscript

16 và

chmod u+x myscript

17 được sử dụng để thêm chú thích nhiều dòng trong bash shell.

bash duong-dan-file-script

3

Chạy tập tin với lệnh

NUMBER=1999
name=blogd.net

8.

bash duong-dan-file-script

4

Ví dụ 3: Bash sử dụng lệnh

chmod u+x myscript

19 để tạo một thư mục mới.

bash duong-dan-file-script

5

Chạy tệp bằng lệnh bash.

bash duong-dan-file-script

6

3.2. Sử dụng cấu trúc điều kiện trong bash shell

Chúng ta có thể sử dụng cấu trúc điều kiện với một hoặc nhiều điều kiện. Trong đó cấu trúc điều kiện bắt đầu bằng

chmod u+x myscript

20 và kết thúc bằng

chmod u+x myscript

21.

Một số cú pháp thường dùng của cấu trúc điều kiện:

  • Câu lệnh if đơn cú pháp như sau:

    bash duong-dan-file-script

    7
  • Câu lệnh if sau đó else:

    bash duong-dan-file-script

    8
  • Lồng if và theo sau đó là else:

    bash duong-dan-file-script

    9

Ví dụ 1: Tạo file có tên

chmod u+x myscript

22. Chúng ta gán biến n bằng 20 và thực hiện điều kiện so sánh nếu $n bé hơn 10 in kết quả ra màn hình số có một chữ số và ngược lại in ra màn hình số có hai chữ số:

#!/bin/bash
# this is a comment

0

Chạy tệp với lệnh bash.

#!/bin/bash
# this is a comment

1

Ví dụ 2: Sử dụng câu lệnh if với logic AND:

Chúng ta có thể xác định nhiều điều kiện trong câu lệnh

chmod u+x myscript

20 bằng logic AND (

[root@localhost ~]# echo $$
6565

2). Tạo một tệp có tên

chmod u+x myscript

25 giá trị của các biến tên người dùng và mật khẩu sẽ được nhập vào và so sánh với username va password trong if. Nếu cả hai giá trị khớp nhau thì đầu ra sẽ là người dùng hợp lệ , nếu không, đầu ra sẽ là người dùng không hợp lệ .

#!/bin/bash
# this is a comment

2

Chạy tệp với lệnh bash.

#!/bin/bash
# this is a comment

3

Ví dụ 3: Sử dụng câu lệnh if với logic OR

Tạo một file có tên

chmod u+x myscript

26 và giá trị của n sẽ được nhập từ người dùng. Nếu giá trị bằng 150 hoặc 400 thì đầu ra sẽ là bạn đã nhập đúng, ngược lại thì trả về kết quả bạn nhập sai.

#!/bin/bash
# this is a comment

4

Chạy tệp với lệnh bash.

#!/bin/bash
# this is a comment

5

Ví dụ 4: Nếu bạn muốn kiểm tra sự tồn tại của thư mục trong vị trí hiện tại trước khi thực hiện lệnh

chmod u+x myscript

19 thì có thể sử dụng tùy chọn

chmod u+x myscript

28 để kiểm tra một thư mục cụ thể có tồn tại hay không như sau:

#!/bin/bash
# this is a comment

6

Chạy tệp bằng lệnh bash.

#!/bin/bash
# this is a comment

7

3.2. Sử dụng cấu trúc vòng lặp trong bash shell

Một số cú pháp cấu trúc vòng lặp thường được sử dụng:

  • Vòng lặp while

    #!/bin/bash

    this is a comment

    8
  • Vòng lặp until

    #!/bin/bash

    this is a comment

    9
  • Vòng lặp for: Lặp lại một danh sách và thực hiện một lệnh cho mỗi lần lặp

    #!/bin/bash echo myscript # this is a comment

    0

Trong các vòng lặp, chúng ta có thể sử dụng các câu lệnh

chmod u+x myscript

29 hay

chmod u+x myscript

30 để phá vỡ vòng lặp hoặc chỉ cần bỏ qua bước lặp hiện tại.

Ví dụ 1: Sử dụng vòng lặp for

Tạo một tệp có tên

chmod u+x myscript

31 và thêm tập lệnh sau bằng vòng lặp for. Ở đây, vòng lặp for sẽ lặp lại trong 5 lần và in tất cả các giá trị của biến, bộ đếm trong một dòng.

#!/bin/bash
echo myscript # this is a comment

1

Chạy tệp với lệnh bash.

#!/bin/bash
echo myscript # this is a comment

2

Ví dụ 2: Sử dụng vòng lặp while

Tạo một tệp có tên

chmod u+x myscript

32 và thêm tập lệnh sau bằng vòng lặp while. Ở đây, vòng lặp while sẽ in tất cả các số từ 1 đến 5.

#!/bin/bash
echo myscript # this is a comment

3

Chạy tệp với lệnh bash.

#!/bin/bash
echo myscript # this is a comment

4

Ví dụ 3: Sử dụng vòng lặp until

Tạo một tệp có tên

chmod u+x myscript

33 và thêm tập lệnh sau bằng vòng lặp until. Ở đây, vòng lặp until sẽ in tất cả các số từ 10 đến 15.

#!/bin/bash
echo myscript # this is a comment

5

#!/bin/bash
echo myscript # this is a comment

6

3.3. Cấu trúc case trong bash shell

Cấu trúc của case nó được bắt đầu bằng

chmod u+x myscript

34 và kết thúc bằng

chmod u+x myscript

35 cho phép chúng ta chọn các tuyến khác nhau tùy thuộc vào một giá trị có cú pháp như sau:

#!/bin/bash
echo myscript # this is a comment

7

Chúng ta cần thêm một dấu chấm phẩy kép (;;) sau mỗi trường hợp.

Ví dụ: Tạo một tệp mới có tên

chmod u+x myscript

36 và thêm tập lệnh sau. Đầu ra của tập lệnh sau sẽ giống với tập lệnh trong ví dụ:

#!/bin/bash
echo myscript # this is a comment

8

Chạy tệp với lệnh bash.

#!/bin/bash
echo myscript # this is a comment

9

3.4. Cú pháp lựa chọn trong bash shell

Cấu trúc

chmod u+x myscript

37 sẽ hiển thị cho người dùng một menu các lựa chọn để người dùng có thể lựa chọn:

name=value

0

Ví dụ: Tạo tập tin

chmod u+x myscript

38 và tạo các tùy chọn như sau:

name=value

1

name=value

2

3.5. Làm việc với các chuỗi

Cho một chuỗi:

name=value

3

Chúng ta có thể lấy chiều dài của chuỗi bằng cách sử dụng

chmod u+x myscript

39. Luôn sử dụng dấu ngoặc kép quanh các chuỗi, khi chúng ta làm việc với nó để tránh bash diễn giải các ký tự đặc biệt bên trong chúng.

Ngoài ra bạn có thể so sánh 2 chuỗi bằng cách sử dụng toán tử

echo $NUMBER
echo $name

1 hoặc

#!/bin/bash
age=23
min_age=18
if test $age -lt $min_age
    then
        echo "Not old enough"
fi

9:

"$strings" = "$anotherstrings" "$strings" == "$anotherstrings"

Bạn cũng có thể kiểm tra sự khác nhau giữa hai chuỗi:

"$strings" != "$anotherstrings"

Ví dụ: Kết hợp các biến chuỗi trong bash. Tạo một tập tin có tên string.sh và thêm đoạn mã sau để có thể kết hợp các biến chuỗi trong bash sử dụng toán tử

echo $NUMBER
echo $name

4 hoặc in các biến với nhau như sau:

name=value

4

Chạy tệp với lệnh bash.

name=value

5

3.6. Sử dụng mảng

Mảng là một danh sách các mục, được khai báo bên trong dấu ngoặc đơn như sau:

name=value

6

Bạn có thể tham chiếu bất kỳ mục nào trong một mảng bằng dấu ngoặc vuông:

name=value

7

Bạn có thể nhận được tổng số mục trong một mảng bằng cú pháp này:

name=value

8

3.7. Sử dụng function

Cũng giống như javascript hay ngôn ngữ lập trình nào khác, chúng ta có thể tạo ra các đoạn mã nhỏ để có thể sử dụng lại khi cần thiết, bằng cách đặt tên cho chúng và gọi chúng khi cần.

Cú pháp của một hàm như sau:

name=value

9

Trong đó

chmod u+x myscript

43 là tên chúng ta cần đặt cho hàm, và là tên để chúng ta gọi khi cần thiết.

Ví dụ 1: Tạo một hàm đơn giản và gọi hàm được hiển thị trong đoạn script sau. Tạo một tập tin có tên

chmod u+x myscript

44 và thêm đoạn mã sau. Bạn có thể gọi bất kỳ chức năng nào bằng tên mà không sử dụng bất kỳ dấu ngoặc nào trong tập lệnh bash.

NUMBER=1999
name=blogd.net

0

Chạy tệp với lệnh bash.

NUMBER=1999
name=blogd.net

1

Ví dụ 2: Bash không thể khai báo tham số tại thời điểm khai báo hàm. Nhưng chúng ta có thể sử dụng các tham số trong hàm bằng cách sử dụng biến khác. Tạo một tập tin có tên

chmod u+x myscript

44 và thêm đoạn mã sau tính diện tích hình chữ nhật:

NUMBER=1999
name=blogd.net

2

Chạy tệp bằng lệnh bash.

NUMBER=1999
name=blogd.net

3

4. Lời kết

Qua bài trên, giúp cho chúng ta biết cách sử dụng lập trình bash shell trên hệ điều hành Linux. Qua các ví dụ cơ bản bên trên giúp chúng ta có viết các script phục vụ công việc hằng ngày của chúng ta một cách tiện lợi nhất.