NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
27/09/2024
Lượt xem

Bash String – Hướng dẫn cách tạo và tìm các chuỗi trong Bash

27/09/2024
16 phút đọc
Lượt xem

Đánh giá

Chuỗi (string) là một khái niệm nền tảng trong lập trình Bash, đóng vai trò then chốt trong việc xử lý văn bản, dữ liệu và tương tác với người dùng. Việc hiểu rõ về chuỗi là điều kiện tiên quyết để bạn có thể viết script Bash hiệu quả. Trong bài viết này, Vietnix sẽ cung cấp cho bạn những kiến thức cơ bản về chuỗi, cách thức thao tác với chuỗi và ứng dụng trong các tình huống thực tế.

Chuỗi trong Bash trên Linux là gì?

Trong Linux, Bash String (được gọi là chuỗi trong Bash) được hiển thị dưới dạng một dãy các ký tự được đặt trong cặp dấu nháy đơn, nháy kép hoặc thậm chí không có dấu nháy. Tuy nhiên, việc không sử dụng dấu nháy cho chuỗi chứa khoảng trắng có thể dẫn đến xảy ra lỗi.

Bassh String la gi
Bash String - Hướng dẫn cách tạo và tìm các chuỗi trong Bash 32

Dưới đây là một số điểm cần lưu ý về cách Bash xử lý chuỗi:

  • Dấu nháy đơn (‘ ‘): Mọi ký tự bên trong dấu nháy đơn đều được coi là giá trị literal (nghĩa đen) và giữ nguyên nội dung bên trong, không thay thế biến. Ví dụ, các ký tự đặc biệt như “@” và “*” sẽ được hiểu theo nghĩa đen, không mang ý nghĩa đặc biệt nào.
  • Dấu nháy kép (” “): Cho phép bạn làm nhiều việc hơn như mở rộng biến và thay thế lệnh. Các ký tự “@” và “*” trong dấu nháy kép mang ý nghĩa đặc biệt, lần lượt là mở rộng tham số và tách từ. Do đó, các ký tự bên trong dấu nháy kép không phải lúc nào cũng được hiểu theo nghĩa đen.

Về bản chất, chuỗi trong Bash được biểu diễn dựa trên khái niệm biến. Bên cạnh việc là một kiểu dữ liệu riêng biệt như số nguyên hay boolean, chuỗi trong Bash thường được sử dụng để biểu diễn văn bản.

Bên cạnh đó, bạn có thể tìm hiểu cách chạy tập lệnh bash để quá trình thực hiện chuỗi trong Bash diễn ra thuận lợi hơn.

Cách 1: Tạo chuỗi văn bản đơn giản 

Chuỗi văn bản đơn giản là loại chuỗi cơ bản nhất, bao gồm các ký tự chữ và số, ký hiệu và dấu câu. Loại chuỗi này thường được sử dụng để biểu diễn dữ liệu văn bản như tin nhắn, nội dung file và dữ liệu nhập từ người dùng.

Để tạo một chuỗi văn bản đơn giản, hãy sử dụng một biến theo toán tử gán (=). Ví dụ:

#!/bin/bash

string=Hello1234!

echo $string

Giải thích: Dòng chuoi=Hello1234! gán chuỗi vào biến chuoi bằng toán tử gán.

Kết quả: Như bạn thấy ở hình bên dưới, chuỗi văn bản đơn giản đã được tạo và in ra màn hình. 

chuỗi văn bản đơn giản đã được tạo và in ra
Chuỗi văn bản đơn giản đã được tạo và in ra

Cách 2: Sử dụng dấu nháy đơn

Dấu nháy đơn được dùng để tạo một chuỗi trong đó mọi ký tự bên trong dấu nháy đơn đều được coi là ký tự nguyên văn. Cách này phù hợp khi bạn muốn chuỗi có các ký tự đặc biệt hoặc ngăn chặn việc hiểu sai các ký tự. Ví dụ:

#!/bin/bash

string1='Hello World!'

string2='It’s a new string.'

echo $string1

echo $string2

Giải thích: Hai chuỗi khác nhau được gán cho hai biến khác nhau string1 và string2. Ký hiệu $ được sử dụng để truy cập biến. Lệnh echo được dùng để in các chuỗi ra màn hình.

Sử dụng dấu nháy đơn để tạo chuỗi trong Bash
Sử dụng dấu nháy đơn để tạo chuỗi trong Bash

Cách 3: Sử dụng dấu nháy kép

Dấu nháy kép được sử dụng để tạo chuỗi có thể thay đổi, chạy lệnh và dùng ký tự đặc biệt. Nhờ những khả năng này, dấu nháy kép rất hữu ích khi bạn muốn tạo ra các chuỗi có chứa nội dung động, thay đổi dựa trên biến hoặc kết quả của các lệnh khác. Ví dụ:

#!/bin/bash

string1="This is another string"

echo $string1

name=$(whoami)

echo "The name of the user is $name"

Giải thích: Ta khai báo chuỗi string1 với dấu nháy kép. Lệnh whoami lấy tên người dùng hiện tại và gán vào biến name. Lệnh echo in ra chuỗi với biến name. Như vậy, ta dễ dàng tạo chuỗi đơn giản bằng dấu nháy kép.

Tạo chuỗi đơn giản bằng dấu nháy kép
Tạo chuỗi đơn giản bằng dấu nháy kép

iconLưu ý

Ta có thể chạy lệnh và thêm kết quả vào chuỗi bằng dấu $() hoặc dấu nháy ngược (`). Ví dụ, name=$(whoami) là lệnh lấy tên người dùng và in ra bằng dấu nháy đôi.

Cách 4: Tạo chuỗi nhiều dòng bằng cách sử dụng ký tự xuống dòng

Khi bạn muốn viết nhiều dòng trong một chuỗi, bạn có thể sử dụng ký tự \n. Ký tự này sẽ giúp bạn bắt đầu một dòng mới. Ví dụ:

#!/bin/bash

echo "Using new line character"

multiline="Hello World!\nIt’s a new string.\nThis is another string."

echo -e "$multiline"

Giải thích: Ký tự đặc biệt \n được dùng để tạo một dòng mới trong chuỗi. Để sử dụng \n hiệu quả, bạn có thể kết hợp /n với lệnh echo và tùy chọn -e. Điều này giúp máy tính hiểu và thực hiện đúng lệnh tạo dòng mới.

Tạo chuỗi nhiều dòng bằng cách sử dụng ký tự xuống dòng
Tạo chuỗi nhiều dòng bằng cách sử dụng ký tự xuống dòng

Cách 5: Tạo chuỗi nhiều dòng bằng Here Document

Here Document là một tính năng cho phép bạn chèn một khối văn bản mà không cần sử dụng dấu nháy hoặc ký tự xuống dòng. Văn bản được đặt giữa << và một dấu phân cách. Ví dụ:

#!/bin/bash

Multilinestring=$(cat << EOF

Hello World!

It’s a new string.

This is another string.

EOF

)

echo "$Multilinestring"

Giải thích: Câu lệnh $(cat << EOF…EOF) là một here document được sử dụng để tạo một chuỗi nhiều dòng. Lệnh cat đọc văn bản nằm giữa dấu <<EOF và EOF. Chuỗi trong biến Multilinestring sẽ được in ra màn hình bằng lệnh echo.

Kết quả: Như hình bên dưới, bạn có thể thấy rằng here document cho phép bạn in ra các chuỗi nhiều dòng.

Tạo chuỗi nhiều dòng bằng Here Document
Tạo chuỗi nhiều dòng bằng Here Document

Đọc chuỗi trong Bash bằng lệnh read

Lệnh read trong Bash được sử dụng để đọc dữ liệu từ người dùng hoặc từ một file, sau đó gán dữ liệu đó vào một biến. Cú pháp cơ bản của lệnh read là: 

read [option] [variable]

Trong đó:

  • option: Là các tùy chọn bổ sung cho lệnh read. Ví dụ như -r, -n, -t, và -p.
  • variable: Là tên biến sẽ lưu trữ dữ liệu được đọc.

Để đọc chuỗi bằng lệnh read, bạn có thể thực hiện chạy Bash Scripting theo các quy trình dưới đây:

Đọc từ input của người dùng với giới hạn cụ thể

#!/bin/bash

# Prompt the user to enter a string

echo "Enter a string: "

read -n 24 userInput

# Display the entered string

echo -e "You entered: $userInput"

Giải thích: Lệnh read nhận input từ user và lưu trữ thông tin này trong biến userInput. Tùy chọn -n dùng với lệnh read giới hạn số ký tự, được quy định là 24. Sau đó, với lệnh echo, nó được in ra trên terminal, và tùy chọn -e được sử dụng để giải thích ký tự thoát. Trong quá trình trên, nếu bạn nhập vào một chuỗi văn bản, thì lệnh sẽ in ra kết quả tương tự và bạn có thể xem ngay trên dòng lệnh.

Đọc chuỗi trong Bash bằng lệnh read
Đọc chuỗi trong Bash bằng lệnh read

Đọc từ lời nhắc

#!/bin/bash 

# Read a string with a prompt 

read -p "Enter a string: " userInput 

# Display the entered string 

echo "You entered: $userInput"

Giải thích: Khi sử dụng lệnh read với tùy chọn -p, bạn có thể yêu cầu user nhập dữ liệu trực tiếp mà không cần sử dụng lệnh echo để hiển thị lời nhắc. Dữ liệu được nhập vào sẽ được lưu trữ trong một biến, ví dụ như biến userInput. Để hiển thị dữ liệu này, bạn có thể sử dụng lệnh echo.

Hiển thị dữ liệu sau khi đọc
Hiển thị dữ liệu sau khi đọc

iconLưu ý

Nếu như bạn muốn nhập dữ liệu một cách kín đáo, như mật khẩu, bạn có thể sử dụng tùy chọn -s cùng với lệnh read. Tùy chọn này giúp dữ liệu nhập vào không bị nhìn thấy, giúp bảo mật thông tin của bạn.

Sử dụng string interpolation trong Bash

String interpolation là cách thêm nội dung của biến hoặc kết quả lệnh vào trong một chuỗi. Điều này rất quan trọng để tạo các chuỗi động bằng cách kết hợp trực tiếp giá trị của biến hoặc thay thế lệnh vào chuỗi.

Để thực hiện string interpolation, bạn sử dụng dấu ngoặc nhọn { } để in các ký tự không phải khoảng trắng ngay sau biến:

#!/bin/bash 

food="apple" 

echo "I eat ${food}s"

Giải thích: Khai báo biến food và gán giá trị chuỗi “apple” cho biến. ${food}s đại diện cho việc mở rộng tham số với biến food và thêm ký tự “s” vào cuối chuỗi. 

Kết quả: Bạn có thể thấy ký tự “s” đã được thêm ngay sau biến apple.

String interpolation trong Bash
String interpolation trong Bash

iconLưu ý

Lưu ý: Để lấy kết quả của một lệnh, bạn có thể sử dụng dấu ngoặc đơn () như.

Sau đây là ví dụ:

string1=$(date)

Tuy nhiên, bạn cần lưu ý rằng đây không phải là cách chính xác để nối chuỗi bên trong dấu nháy kép. Bạn có thể sử dụng tính năng mở rộng tham số (parameter expansion) để trích xuất một phần cụ thể từ một chuỗi. Cú pháp chung là:

${variable:offset:length}

Trong đó:

  • variable: Tên biến chứa chuỗi.
  • offset: Vị trí bắt đầu trích xuất (bắt đầu từ 0).
  • length: Độ dài của chuỗi con muốn trích xuất.

Ví dụ:

#!/bin/bash

original_string="The extracted substring."

substring=${original_string:4:9}

echo "Original String: $original_string"

echo "Substring: $substring"

Giải thích: ${original_string:4:9} được dùng để lấy một phần nhỏ của chuỗi gốc. Phần này bắt đầu từ ký tự thứ 5 của chuỗi gốc và có độ dài 9 ký tự.

Thực hiện lấy một phần nhỏ của chuỗi gốc
Thực hiện lấy một phần nhỏ của chuỗi gốc

Danh sách các chuỗi trong mảng trong Bash

Trong Bash, một danh sách chuỗi được biểu diễn bằng một mảng chứa nhiều phần tử, mỗi phần tử là một chuỗi. Bạn có thể sử dụng mảng Bash (Bash Array) để truy cập và thao tác trên từng chuỗi trong danh sách.

Dưới đây là cách khai báo một mảng chuỗi và hiển thị các phần tử trong đó:

#!/bin/bash

# Declare an array of strings

myList=("Apple" "Banana" "Orange" "Grape")

# Access individual elements

echo "First item: ${myList[0]}"

echo "Second item: ${myList[1]}"

# Print all elements

echo "All fruit items: ${myList[@]}"

Giải thích: Đoạn code trên tạo một danh sách gọi là myList. Mỗi phần tử trong danh sách được viết riêng biệt, cách nhau bởi dấu cách. Sử dụng cú pháp ${myList[@]} để in ra toàn bộ danh sách. Nếu muốn in ra phần tử đầu tiên và thứ hai, chúng ta thay thế @ bằng 0 và 1.

Tạo và liệt kê toàn bộ danh sách
Tạo và liệt kê toàn bộ danh sách

Ứng dụng 1: Thao tác với biến

  • Lưu trữ dữ liệu: Chuỗi được dùng để lưu trữ dữ liệu trong biến, cho phép truy cập và thao tác dữ liệu một cách hiệu quả.
  • Truyền tham số: Chuỗi được dùng như tham số input cho các hàm và script, giúp tăng tính linh hoạt và module hóa.
Ứng dụng chuỗi trong Bash
Ứng dụng chuỗi trong Bash

Ứng dụng 2: Input/Output của người dùng

  • Đọc dữ liệu Bash Input: Lệnh read cho phép đọc dữ liệu nhập từ người dùng trên dòng lệnh, tạo khả năng tương tác giữa người dùng và script.
  • Hiển thị thông tin: Chuỗi kết hợp với lệnh echo được dùng để hiển thị thông tin, in kết quả và thông báo lỗi trên terminal.
  • Định dạng Bash output: Bạn có thể nối chuỗi, cắt chuỗi và sử dụng lệnh printf để định dạng output của chuỗi.

Ứng dụng 3: Xử lý văn bản và file

  • Đọc và ghi file: Chuỗi đóng vai trò quan trọng trong việc đọc, ghi, lưu trữ, thao tác và truyền dữ liệu văn bản giữa script và file.
  • Xử lý văn bản: Chuỗi được dùng để trích xuất từ cụ thể, tách chuỗi thành các chuỗi con và thay thế từ trong chuỗi.
  • Tìm kiếm file và văn bản: Kết hợp với các lệnh như grep và sed, chuỗi giúp tìm kiếm mẫu văn bản cụ thể trong file.
  • Trích xuất thông tin: Chuỗi được phân tích cú pháp và trích xuất thông tin cụ thể từ file.

Ứng dụng 4: Tự động hóa và thay thế lệnh

  • Tạo lệnh động: Chuỗi được dùng để tạo và thực thi các lệnh động, giúp tự động hóa các tác vụ phức tạp.
  • Nắm bắt kết quả lệnh: Chuỗi được dùng trong kỹ thuật thay thế lệnh để nắm bắt kết quả của các lệnh khác vào trong script.

Ứng dụng 5: Xử lý lỗi và gỡ lỗi

  • Thông báo lỗi: Chuỗi được dùng để in thông báo lỗi, cung cấp thông tin gỡ lỗi cho người dùng.
  • Ghi log: Chuỗi giúp ghi lại log và theo dõi quá trình thực thi của script để hỗ trợ gỡ lỗi.

Sự khác biệt giữa dấu nháy đơn và dấu nháy kép trong chuỗi Bash

Đặc điểmDấu nháy đơn (‘…’)Dấu nháy kép (“…”)
Mở rộng lịch sử lệnhKhông cho phépCho phép với ký tự !
Thay thế lệnhKhông cho phépCho phép
Mở rộng biếnKhông cho phépCho phép
Ký tự thoátKý tự thoát \ bên trong dấu nháy đơn được giữ nguyên ý nghĩaCác ký tự $, `, “, và \ bên trong dấu nháy kép có thể được thoát bằng \
Truy cập mảngKhông thể truy cậpCó thể truy cập
Dấu nháy lồng nhauDấu nháy đơn bên trong dấu nháy kép không có ý nghĩa đặc biệt. Không thể sử dụng dấu nháy đơn bên trong dấu nháy đơnDấu nháy kép bên trong dấu nháy đơn được coi là ký tự thông thường
Ký tự đặc biệtCác ký tự đặc biệt như @ và * bên trong dấu nháy đơn được giữ nguyên ý nghĩaCác ký tự @ và * bên trong dấu nháy kép có ý nghĩa đặc biệt 

Câu hỏi thường gặp

Bash có thể hỗ trợ các kiểu dữ liệu khác nhau cho chuỗi không?

Có thể. Bash có thể xử lý với một số cách như sau:
1. So sánh
2. Cắt chuỗi
3. Thay thế chuỗi
4. Kết hợp chuỗi
5. Kiểm tra độ dài của chuỗi

Có thể sử dụng các toán tử so sánh để so sánh các chuỗi trong Bash không?

Hoàn toàn có thể. Một số dòng lệnh bạn có thể sử dụng để kiểm tra:
du -sh <tên_liên_kết_tượng_trưng>: Hiển thị kích thước đĩa (disk usage) của thư mục đích một cách dễ đọc (h: human-readable).
ls -lh <tên_liên_kết_tượng_trưng>: Cung cấp thông tin chi tiết về thư mục, bao gồm kích thước, quyền truy cập, ngày sửa đổi…
stat <tên_liên_kết_tượng_trưng>: Cung cấp thông tin chi tiết hơn về thư mục, bao gồm cả kích thước và các thuộc tính khác.

Lời kết

Hy vọng những thông tin này sẽ hữu ích cho bạn trong việc viết script shell và thao tác với chuỗi hiệu quả. Nếu bạn có bất kỳ câu hỏi nào hoặc muốn tìm hiểu thêm về các chủ đề liên quan đến Bash, đừng ngần ngại đặt câu hỏi bên dưới.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG