Monday, January 20, 2025

[Bash] Lesson 8 – Bash Variables

-

1. Biến trong Bash là gì?

Các biến là một phần quan trọng của lập trình hoặc chúng ta có thể nói là tinh thần của một ngôn ngữ lập trình. Các biến chỉ định vị trí bộ nhớ thông qua ký tự, số hoặc ký tự số. Chúng được sử dụng để tham chiếu và điều khiển trong một chương trình máy tính.

Các biến Bash là gì? Chúng ta không thể sử dụng các biến Bash mà không có đầy đủ thông tin (cú pháp, kiểu dữ liệu, loại, hoạt động) về nó, vì vậy, hãy đi qua bài hướng dẫn ngắn này để có cái nhìn tổng quan đúng đắn về các biến Bash.

Đầu tiên, hãy biết cú pháp.

Cú pháp:

Variable_name =value

Bộ quy tắc để xác định các biến Bash:

  • Thêm dấu dollar ($) trước tên biến khi đọc hoặc in ra một biến.
  • Không để dấu dollar ($) khi thiết lập một biến với bất kỳ giá trị nào.
  • Tên biến có thể là chữ và số hoặc viết với gạch chân (_).
  • Tên biến phân biệt chữ hoa và chữ thường: x và X được coi là hai biến khác nhau.
  • Tên biến có thể viết bằng chữ in hoa hoặc chữ thường hoặc kết hợp cả hai chữ.
  • Một biến có thể đặt bất cứ đâu trong Bash Script hoặc trên dòng lệnh, bởi vì khi chạy, Bash sẽ thay thế nó bằng giá trị được gán cho nó. Điều này trở thành khả thi nhờ sự thay thế trước khi chạy lệnh.
  • Không được sử dụng khoảng trắng ở hai bên dấu bằng (=) giữa tên biến và giá trị của nó.
  • Không cần sử dụng bất kỳ dấu ngoặc kép hoặc nháy đơn nào để xác định một biến với giá trị ký tự đơn như var1 = biến. Để nhập nhiều từ hoặc chuỗi như một mục duy nhất trong một biến, hãy sử dụng dấu ngoặc kép để bao quanh nội dung của bạn trong biến đó.
  • Dấu nháy đơn (”) giúp xử lý từng ký tự.
  • Dấu nháy kép (“”) giúp thực hiện sự thay thế.

2. Loại dữ liệu

Trong các ngôn ngữ lập trình thông thường, bạn phải xác định kiểu dữ liệu của bất kỳ biến nào tại thời điểm khai báo biến. Ví dụ:

int year=2012
char comp_name='jtp'

Tuy nhiên, trong trường hợp của Bash, bạn không cần phải xác định kiểu dữ liệu của bất kỳ biến nào tại thời điểm khai báo biến. Biến Bash là không có kiểu dữ liệu, điều này có nghĩa là chỉ cần nhập tên biến và gán giá trị cho nó, và nó sẽ tự động xác định kiểu dữ liệu.

Ví dụ, nếu bạn gán bất kỳ giá trị số nào cho biến, nó sẽ hoạt động như số nguyên và nếu bạn gán giá trị ký tự cho biến thì nó sẽ là chuỗi.

year=2012
comp_name=jtp

Sử dụng lệnh echo, đọc chúng bằng cách gán $ trước tên của chúng, ví dụ:

echo $year
echo $name

3. Các loại biến trong shell.

Có hai loại biến trong shell hoặc bất kỳ hệ thống UNIX nào.

  • Biến hệ thống được định nghĩa trước (System-Defined Variables): Đây là các biến được định nghĩa sẵn do hệ điều hành LINUX tạo ra và duy trì. Cách thức đặt tên chung của chúng là thường được viết hoa, tức là UPPER_CASE. Vì vậy, khi bạn nhìn thấy một biến được định nghĩa bằng chữ in hoa, phần lớn thì đó là các biến được định nghĩa sẵn của hệ thống.
  • Các biến do người dùng xác định (User-Defined Variables): Đây là các biến mà người dùng định nghĩa trong script của họ. Chúng ta có thể gán bất kỳ giá trị nào cho biến và đặt tên biến theo mong muốn của chúng ta. Các biến này có thể được sử dụng trong tất cả các phần của script và giá trị của chúng có thể được thay đổi trong khi script đang thực thi. Các biến do người dùng xác định thường được đặt tên bằng chữ thường hoặc với ký tự gạch dưới.

3.1. Biến hệ thống được định nghĩa

Dưới đây là các biến được định nghĩa sẵn của hệ thống:

BASH biểu thị Tên Shell.

BASH=/usr/bin/bash  

BASH_VERSION chỉ định phiên bản shell mà Bash đang sử dụng.

BASH_VERSION=4.2.46(2)  

COLUMNS chỉ định số cột cho màn hình của chúng ta.

COLUMNS=80  

HOME chỉ định thư mục chủ cho người dùng.

HOME=/home/jatpoint  

LOGNAME chỉ định tên đăng nhập của người dùng.

LOGNAME=javatpoint  

OSTYPE cho biết loại hệ điều hành.

OSTYPE=linux-gnu  

PWD biểu thị thư mục làm việc hiện tại.

PWD=/home/javatpoint  

USERNAME chỉ định tên người dùng hiện đang đăng nhập.

USERNAME=javatpoint  

Để biết danh sách các biến này trong hệ thống của bạn, hãy nhập các lệnh set, env và printenv trên terminal như sau:

Gõ lệnh set .

Gõ lệnh env

Gõ lệnh printenv

Bạn có thể tạo 1 file bash và điền nội dung các biến hệ thống vào đó sau đó in giá trị ra màn hình, các bước thực hiện như sau:

Bước 1: Tạo một file có tên là Bash_sdvar và nhập mã sau trên Bash Console như sau:

#! /bin/bash  
# Bash System-defined Variables  
echo $HOME # Home Directory  
echo $PWD # current working directory  
echo $BASH # Bash shell name  
echo $BASH_VERSION # Bash shell Version  
echo $LOGNAME # Name of the Login User  
echo $OSTYPE # Type of OS  

Bước 2. Lưu và thực thi script. Nó sẽ hiển thị đầu ra như bạn có thể thấy trong hình ảnh được đưa ra bên dưới.

3.2. Các biến do người dùng tự định nghĩa

Các biến này được tạo và quản lý bởi người dùng. Thông thường, các biến loại này được định nghĩa bằng CHỮ_THƯỜNG. Không có quy tắc nghiêm ngặt để viết các biến này bằng chữ thường. Chúng ta có thể viết chúng bằng chữ HOA nếu muốn.

Hãy tạo một Bash Script để định nghĩa các biến này. Làm theo các bước sau:

Bước 1. Tạo một file có tên là Bash_udvar và gõ mã sau trên Bash Console:

#! /bin/bash  
# User-Defined Variables   
name=Peter  
ROLL_NO=5245325  
echo "The student name is $name and his Roll number is $ROLL_NO."  

Bước 2: Lưu và thực thi script.

4. Hoạt động của Bash Variables

Sau khi đã hiểu về các biến cơ bản, hãy đi sâu vào tìm hiểu cách chúng hoạt động trong Bash.

Có hai hành động chính mà chúng ta thường thực hiện với một biến trong Bash như sau:

  • Thiết lập một giá trị cho biến.
  • Đọc giá trị của biến đó.

Một giá trị biến có thể được thiết lập bằng nhiều cách khác nhau, trong đó cách phổ biến nhất là thiết lập giá trị trực tiếp. Để đọc một biến, chúng ta có thể đặt tên của nó (được tiền tố bằng ký hiệu $) ở bất kỳ đâu trong kịch bản.

Bash trước tiên kiểm tra tất cả các tên biến xem chúng có xuất hiện trong kịch bản không. Sau đó, nó giải thích từng dòng của kịch bản. Sau khi xác định được mỗi biến, nó thay thế tên biến đó bằng giá trị được gán cho nó. Sau đó, Bash giải thích/chạy mã đó và tiếp tục quá trình này cho từng dòng mã của kịch bản của chúng ta.

LƯU Ý: Cả hai loại biến trong Bash (mà chúng ta đã thảo luận) đều hoạt động trên dòng lệnh cũng như trên Bash script. Hãy xem cách hoạt động của chúng trên terminal và Bash thông qua một ví dụ đơn giản:

Ví dụ: Gọi tên người dùng bằng XYZ, địa điểm mà anh ta đang làm việc và phiên bản của Bash Shell mà anh ta đang sử dụng cho việc lập trình Bash.

  • Thực hiện với Terminal
  • Thực hiện với Bash Shell

Ví dụ: Gọi tên người dùng bằng XYZ, vị trí mà anh ấy đang làm việc và phiên bản của Bash Shell mà anh ấy đang sử dụng để thực hiện Bash Scripting.

  1. Làm việc trên Terminal

Trong dòng thứ 3 của script, chúng ta đã khai báo một biến USER_NAME để lưu tên người dùng XYZ như giá trị của nó.

Ở hai dòng cuối cùng, chúng ta đã in thông báo dự định bằng cách sử dụng lệnh echo.

Có hai biến và một lệnh trong thông báo này. Mỗi một trong số chúng được đặt trước bởi ký hiệu đô la ($) trong đó:

  • USER_NAME là biến do người dùng định nghĩa để gọi tên người dùng,
  • BASH_VERSION là biến được định nghĩa bởi hệ thống, được shell tự gọi. Nó được sử dụng để in ra phiên bản của Bash Shell,
  • Lệnh PWD được sử dụng để in ra vị trí hiện tại của người dùng.

Để hiểu rõ hơn, hãy tạo script này bằng cách làm theo mã được cung cấp:

#! /bin/bash  
#Bash Variables  
USER_NAME=XYZ  
echo Hey there! $USER_NAME is any user currently working on the directory $PWD with Bash Shell Version $BASH_VERSION

Kết quả sẽ là.

Dưới đây là một số ví dụ để luyện tập về biến trên cả dòng lệnh và Bash Shell. Bằng cách tuân thủ các quy tắc đã được thảo luận trước đó, hãy thực hành về biến như sau:

A. Sử dụng Dòng lệnh

Thiết lập biến

 Đọc và tham chiếu các biến

Biến không hợp lệ

Kết hợp 2 biến dạng chuỗi

Nối chuỗi với biến

LƯU Ý: Không sử dụng dấu ngoặc đơn để kết hợp hai biến và cũng không sử dụng nó để nối chuỗi với các biến. Nếu bạn nối chuỗi bằng cách bao chúng trong dấu ngoặc đơn, thì nó sẽ không đọc được như bạn có thể thấy trong hình ảnh dưới đây:

B: Sử dụng Bash Script

Đây là một ví dụ về việc kết hợp các biến Chuỗi.

Kết quả

5. Đối số

Command Line Arguments là các đối số dòng lệnh được sử dụng để làm cho mã nguồn của script linh hoạt hơn bằng cách truyền đầu vào cho code. Chúng ta truyền các đối số này vào thời điểm chạy của script dưới dạng sau:

./script_name arg1 arg2 arg3.....  

Trong Bash Shell, các tham số này được sử dụng với các biến đặc biệt hoặc tham số mặc định sau đây.

$0 chỉ định tên của script được gọi.
$1-$9 lưu trữ tên của 9 đối số đầu tiên hoặc có thể được sử dụng làm vị trí đối số.
$# chỉ định tổng số (số lượng) đối số được truyền cho script.
$* lưu trữ tất cả các đối số dòng lệnh bằng cách ghép chúng lại với nhau.
$@ lưu trữ danh sách các đối số dưới dạng một mảng.
$? chỉ định ID quá trình của script hiện tại.

$! hiển thị ID của công việc nền cuối cùng.
Sau đây là hai phương pháp chúng ta sử dụng để truyền các tham số dòng lệnh:

Phương pháp 1: Sử dụng số thứ tự vị trí

Đây là cách đầu tiên để truy cập đến các đối số bằng cách sử dụng các tham số mặc định ($1 … $9). Hình ảnh dưới đây mô tả cách sử dụng chúng.

Output:

Phương pháp 2: Sử dụng mảng.

Đây là phương pháp thứ hai để truyền các đối số dưới dạng một mảng. Làm theo thuật toán sau để áp dụng phương pháp này.

Bước 1: Tạo một Script Bash.

Bước 2: Khai báo bất kỳ tên biến nào và gán giá trị của nó là $a theo hình thức sau:

variable_name = ("$@")

Trong đó $@ là đối số mặc định được sử dụng để lưu trữ các đối số (chúng ta truyền) dưới dạng một mảng.

Bước 3: Hiển thị các đối số bằng cách định nghĩa chỉ mục mảng của chúng theo hình thức sau:

${variable_name[i]}


Bước 4: Lưu và đóng Script.

Bước 5: Thực thi Script bằng cách truyền các đối số.

#!/bin/bash  
args=("$@")  
echo ${args[0]} ${args[1]} ${args[2]} ${args[3]}  

Trên Bash Console:

6. Thay thế lệnh

“Command Substitution cho phép đầu ra của một lệnh thay thế cho chính lệnh đó. Bash thực hiện việc mở rộng bằng cách thực thi lệnh trong một môi trường subshell và thay thế phép thay thế lệnh với đầu ra chuẩn của lệnh đó, với bất kỳ ký tự xuống dòng cuối cùng nào bị xóa bỏ. Các ký tự xuống dòng nhúng không bị xóa bỏ, nhưng chúng có thể bị xóa bỏ trong quá trình tách từ.”

Command substitution được thực hiện bởi Bash để mở rộng và thay thế đầu ra của lệnh. Nó lấy đầu ra của lệnh Bash, lưu trữ trong một biến (thông thường), và hiển thị lại với lệnh echo.

Command Substitution cung cấp tính linh hoạt về dữ liệu đối với việc viết kịch bản và gán biến. Nó đơn giản và dễ sử dụng để có đầu ra dòng lệnh đơn. Trong trường hợp đầu ra vượt quá một vài dòng, các dòng cuối cùng được xóa bỏ và toàn bộ nội dung đầu ra kết thúc trên một dòng.

Xem cú pháp để sử dụng:

Cú pháp:
Dạng cổ điển của phép thay thế lệnh trong một biến hoặc phép thay thế lệnh là sử dụng dấu ngoặc kép (…), như sau:

variable_name=`command_name`  
variable_name=`command_name [option...] argument1 argument2...`  
variable_name=`/path/to/command`  

Bây giờ, chúng ta thực hiện phép thay thế lệnh bằng cách bao quanh các lệnh trong các ngoặc đơn (được tiền đề bởi ký hiệu đô la ($)). Nhìn vào đây:

variable_name=$(command_name)
variable_name=$(command_name [option…] argument1 argument2…)
variable_name=$(path/to/command)

Vậy, hãy thực hiện phép thay thế lệnh với một ví dụ như trong cuộc trò chuyện.

Trong ví dụ này, chúng ta đang thay thế lệnh ls bằng một biến. Hãy xem trên terminal.

Dòng 1: Khi không sử dụng thay thế lệnh, kết quả được mở rộng thành nhiều dòng.

Dòng 2 và 3: Khi sử dụng thay thế lệnh, kết quả được hiển thị trên một dòng duy nhất (tiết kiệm không gian bằng cách loại bỏ các dòng mới được thêm vào cuối).

Dưới đây là đoạn mã Bash để kiểm tra thay thế lệnh.

#! /bin/bash  

# command substitution  

lsResult=$(ls)  
echo "My files are:" $lsResult  

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories