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
04/11/2024
Lượt xem

Hướng dẫn cách dùng lệnh eval trong Linux và các lựa chọn thay thế lệnh eval

04/11/2024
15 phút đọc
Lượt xem

Đánh giá

5/5 - (1 bình chọn)

Lệnh eval trong Linux là một lệnh tích hợp sẵn trong Bash, cho phép thực thi chuỗi lệnh bằng cách phân tích và xử lý chúng thêm một lần nữa trước khi chạy. Bạn có thể sử dụng lệnh eval để thay thế biến, kết hợp lệnh, hoặc tạo ra các lệnh mới một cách linh hoạt. Trong bài viết này, mình sẽ giúp bạn tìm hiểu cách sử dụng lệnh eval trong Linux thông qua các ví dụ cụ thể, chi tiết.

Những điểm chính

Để giúp bạn có cái nhìn tổng quan, nắm bắt nhanh những nội dung chính của bài viết lệnh eval trong Linux, dưới đây mình sẽ liệt kê các điểm quan trọng trong bài:

  • Lệnh eval trong Linux là gì: Định nghĩa về lệnh eval, một lệnh tích hợp trong shell cho phép phân tích và thực thi lệnh hoặc chuỗi lệnh.
  • Cú pháp lệnh: Bạn sẽ được cung cấp cú pháp cơ bản và giải thích các thành phần trong cú pháp của lệnh eval.
  • Các ví dụ về lệnh eval trong Linux: Để bạn hiểu rõ hơn về lệnh eval, mình sẽ đưa ra 4 ví dụ cụ thể về cách sử dụng lệnh như sử dụng lệnh eval để thay thế biến, thay thế lệnh….
  • Các lệnh thay thế cho lệnh eval: Ngoài lệnh eval, bạn có thể sử dụng một số lệnh khác để đạt được kết quả tương tự như lệnh source hoặc thay thế biến.
  • Vietnix – Nhà cung cấp Dịch vụ Hosting và VPS chất lượng cao.

Lệnh eval trong Linux là gì?

Lệnh eval trong Linux là một lệnh tích hợp sẵn trong shell, dùng để thực thi một chuỗi lệnh đã được lưu dưới dạng biến hoặc kết quả từ một lệnh khác. Lệnh eval sẽ phân tích và thực thi lệnh hoặc chuỗi lệnh đó như thể chúng được nhập trực tiếp vào dòng lệnh.

Lệnh eval trong Linux dùng để thực thi một chuỗi lệnh đã được lưu
Lệnh eval trong Linux dùng để thực thi một chuỗi lệnh đã được lưu

Cú pháp của lệnh eval

Lệnh eval có cú pháp đơn giản như sau:

eval [arg ...]

Giải thích:

  • eval: Đây là tên của lệnh.
  • [arg …]: Phần trong ngoặc vuông là tùy chọn, có thể có hoặc không. Phần này biểu thị cho một hoặc nhiều đối số được truyền cho lệnh eval. Các đối số này có thể là biến, lệnh hoặc chuỗi ký tự. Dấu ba chấm … thể hiện rằng bạn có thể truyền nhiều đối số cùng lúc.

iconLưu ý

Lệnh eval không có bất kỳ option nào đi kèm.

Trước tiên, để làm việc hiệu quả với lệnh eval trong Linux, bạn cần một nền tảng VPS mạnh mẽ và ổn định như VPS Linux của Vietnix để giúp đảm bảo các lệnh được thực thi chính xác và tạo ra một môi trường an toàn để phát triển các script. Sau đây là các ví dụ cụ thể về cách áp dụng lệnh này trong các tình huống, cho phép bạn tận dụng tối đa khả năng của lệnh trong quản lý hệ thống:

Ví dụ 1: Sử dụng lệnh eval để thay thế biến

Lệnh eval có thể được sử dụng để thay thế giá trị của biến vào trong các lệnh hoặc chuỗi. Dưới đây là một số ví dụ minh họa:

Trường hợp 1: Thay thế biến đơn

Để thay thế một biến đơn, bạn cần khai báo biến đó trước, sau đó sử dụng lệnh eval để thay thế. Ví dụ, để lưu giá trị “nam” vào biến user1 và sau đó thay thế biến này bằng eval, bạn sử dụng các lệnh sau:

user1=nam
eval echo $user1

Kết quả: Màn hình sẽ hiển thị là nam. Lệnh eval đã thay thế biến $user1 bằng giá trị “nam” của biến này.

Kết quả hiển thị nam trên màn hình
Kết quả hiển thị nam trên màn hình

Trường hợp 2: Thay thế biến lồng nhau

Lệnh eval cũng có thể được sử dụng để thay thế biến lồng nhau. Biến lồng nhau ở đây có nghĩa là gán một biến đã được khai báo cho một biến khác. Ví dụ, bạn khai báo hai biến user1 member1 như sau:

user1="vietnix"
member1=user1

Ở đây, mình đã khai báo biến user1 và sau đó gán user1 cho biến member1. Tiếp theo, bạn sử dụng lệnh sau để in giá trị của biến member1:

echo \$$member1

Kết quả sẽ là $user1. Tuy nhiên, nếu bạn sử dụng lệnh eval ở đầu dòng lệnh:

eval echo \$$member1

Kết quả: Hệ thống sẽ trả về là vietnix. Lệnh eval đã hiểu rằng $member1 là một biến và giá trị của biến này là user1, sau đó tiếp tục thay thế $user1 bằng giá trị “vietnix” của biến này.

Kết quả sẽ hiển thị là vietnix
Kết quả sẽ hiển thị là vietnix

iconLưu ý

Khi khai báo biến có chứa khoảng trắng, bạn hãy đặt giá trị biến bên trong dấu nháy kép. Trong ví dụ trên, Vietnix đã sử dụng dấu nháy kép khi khai báo biến user1=”vietnix”.

Trường hợp 3: Thay thế biến môi trường

Để lấy giá trị của một biến môi trường (ví dụ, tên người dùng hiện tại), bạn chỉ cần đặt dấu $ trước tên biến, như sau:

var1='echo $USER'
eval $var1

Lệnh trên sẽ hiển thị tên người dùng hiện tại, vì $USER chứa giá trị của biến môi trường. Ngược lại, nếu bạn muốn in ra tên của biến môi trường dưới dạng chuỗi ký tự (chứ không phải giá trị), bạn cần thêm dấu \ trước $:

var2='echo \$USER'
eval $var2

Lệnh này sẽ coi $USER chỉ là một chuỗi văn bản, và kết quả trả về sẽ là $USER thay vì tên người dùng.

Hình minh họa bên dưới hiển thị 2 trường hợp: Trường hợp thứ nhất là khi giá trị của biến môi trường được trả về và trường hợp thứ 2 là khi tên của biến môi trường được trả về.

Kết quả giá trị và tên của biến môi trường được trả về
Kết quả giá trị và tên của biến môi trường được trả về

Ví dụ 2: Sử dụng lệnh eval để thay thế lệnh

Trong Linux, command substitution cho phép bạn sử dụng output của một lệnh làm input hoặc đối số cho một lệnh khác. Bạn có thể sử dụng lệnh eval để thay thế một lệnh. Bạn hãy xem qua các ví dụ dưới đây để hiểu rõ hơn về điều này:

Trường hợp 1: Thay thế lệnh không có tùy chọn

Để thay thế một lệnh không có bất kỳ option nào, bạn có thể sử dụng lệnh eval ở đầu. Ví dụ:

echo "\$(date)"

Dòng lệnh này xem $(date) như một chuỗi và trả về kết quả là $(date). Bây giờ, để lấy giá trị ngày tháng từ lệnh date, bạn có thể sử dụng dòng lệnh sau:

eval echo "\$(date)"

Kết quả: Trong hình minh họa, bạn có thể thấy lệnh echo chỉ đơn giản là hiển thị chuỗi date, trong khi lệnh eval sẽ thực thi lệnh date và hiển thị kết quả là ngày tháng hiện tại.

Kết quả hiển thị ngày tháng hiện tại
Kết quả hiển thị ngày tháng hiện tại

Trường hợp 2: Thay thế lệnh có tùy chọn

Khi thay thế một lệnh có kèm option, lệnh eval cũng có thể khá hữu dụng trong trường hợp này. Ví dụ, để lấy ngày của tháng trước, bạn có thể sử dụng:

previousMonth='date --date="1 month ago"'

Biến previousMonth lưu trữ lệnh date với tùy chọn sẽ trả về ngày chính xác một tháng trước. Tuy nhiên, nếu bạn chỉ đơn giản gõ $previousMonth để thực thi, hệ thống sẽ báo lỗi. Lý do là vì hệ thống sẽ hiểu $previousMonth là một chuỗi ký tự thông thường, chứ không phải là một lệnh cần được thực thi. Để thực thi lệnh được lưu trữ trong biến previousMonth, bạn cần sử dụng lệnh eval như sau:

eval $previousMonth

Kết quả: Lệnh này sẽ thực thi date cùng với tùy chọn –date=“1 month ago”, giúp bạn lấy ngày của tháng trước. Lệnh eval đặc biệt hữu ích khi làm việc với các lệnh phức tạp có nhiều tùy chọn.

Thời gian đã được thay thế vào biến
Thời gian đã được thay thế vào biến

Ví dụ 3: Thực hiện phép toán bằng lệnh eval

Bạn có thể dùng lệnh eval để thay thế và tính toán các biến số học. Ví dụ, hãy khai báo hai biến days và hours, rồi sử dụng chúng để tính totalHours, đại diện cho tổng số giờ (là tích của days và hours):

days=7
hours=24
totalHours='expr $days \* $hours'

Giải thích:

  • Biến days được gán giá trị là 7.
  • Biến hours được gán giá trị là 24.
  • Biến totalHours được gán chuỗi lệnh expr $days \* $hours. Lệnh expr được sử dụng để thực hiện phép toán số học, trong trường hợp này là phép nhân giữa giá trị của biến dayshours.

Tuy nhiên, nếu bạn chỉ đơn giản gõ echo $totalHours, hệ thống sẽ hiển thị chuỗi expr $days \* $hours thay vì kết quả tính toán. Để tính toán và hiển thị kết quả, bạn cần sử dụng lệnh eval như sau:

eval $totalHours

Kết quả: Lệnh eval sẽ đánh giá biến $totalHours, nhận biết đây là một biểu thức toán học rồi thực hiện phép nhân giữa 724. Sau cùng kết quả mà bạn sẽ nhận được giá trị 168

Kết quả nhận được là giá trị 168
Kết quả nhận được là giá trị 168

iconLưu ý

Bạn cũng có thể thực hiện phép toán số học trực tiếp mà không cần sử dụng lệnh expr và hiển thị kết quả như sau:

totalHours=$(($days*$hours))
echo $totalHours

Cả 2 cách đều cho ra kết quả giống nhau. Tuy nhiên, việc sử dụng lệnh eval có thể hữu ích hơn khi bạn muốn lưu trữ và thực thi các biểu thức toán học phức tạp hơn.

Ví dụ 4: Sử dụng lệnh eval trong script shell

Lệnh eval cũng có thể được sử dụng trong các script shell để thực hiện các tác vụ linh hoạt hơn. Ví dụ:

Đầu tiên, hãy mở trình soạn thảo nano và tạo một tập lệnh có tên welcomeNote.sh:

nano welcomeNote.sh

Bạn thêm nội dung sau vào script:

#!/bin/bash
note='echo "Hello! This line is from the script."'
eval $note

Giải thích: 

  • Dòng đầu tiên #!/bin/bash chỉ định trình thông dịch Bash cho script.
  • Biến note được gán chuỗi lệnh echo “Hello! This line is from the script.”.
  • Lệnh eval $note sẽ đánh giá biến $note và thực thi lệnh echo được lưu trữ trong biến này, in ra dòng chữ “Hello! This line is from the script.”.

Sau đó, bạn lưu file và chạy script bằng lệnh sau:

bash welcomeNote.sh

Kết quả: Khi chạy script, bạn sẽ thấy dòng chữ “Hello! This line is from the script.” được in ra màn hình. Điều này cho thấy lệnh eval đã hoạt động chính xác và thực thi nội dung lưu trong biến note.

Kết quả dòng chữ "Hello! This line is from the script." được hiển thị ra màn hình
Kết quả dòng chữ “Hello! This line is from the script.” được hiển thị ra màn hình

Ngoài lệnh eval, bạn có thể sử dụng một số phương pháp khác để đạt được kết quả tương tự. Dưới đây là một số lựa chọn thay thế phổ biến:

Trường hợp 1: Sử dụng lệnh source

Lệnh source cho phép bạn thực thi một file script trực tiếp trong shell hiện tại mà không cần tạo một shell mới. Tức là khi chạy một script với source, các lệnh sẽ được thực thi ngay trong shell hiện tại, giúp giữ nguyên các biến và thiết lập mà script tạo ra.

Cùng mình tìm hiểu cách hoạt động của lệnh source qua ví dụ bên dưới. Đầu tiên mình sẽ tạo script có tên welcome.sh với nội dung sau:

echo 'echo Hello! This line is from the script.' > welcome.sh

Sau đó, mình sử dụng lệnh source để chạy script:

source welcome.sh

Kết quả: Cho thấy lệnh này sẽ thực thi file welcome.sh và hiển thị dòng chữ “Hello! This line is from the script.” trên màn hình.

Nội dung từ file được hiển thị từ script bằng lệnh source
Nội dung từ file được hiển thị từ script bằng lệnh source

Lợi ích của source: Khác với eval, có thể thực thi chuỗi lệnh bất kỳ, source đọc và chạy trực tiếp từ file script, đảm bảo các biến và hàm sẽ khả dụng ngay trong shell hiện tại.

Trường hợp 2: Sử dụng thay thế biến

Trong Bash, thay vì dùng eval, bạn có thể sử dụng thay thế biến (variable substitution) để thực thi các lệnh được lưu trong biến một cách an toàn và đơn giản hơn. Variable substitution sẽ giúp bạn tránh rủi ro khi sử dụng eval và phù hợp cho các dự án nhỏ. Ví dụ:

Đầu tiên, lưu lệnh bạn muốn thực thi vào một biến. Ví dụ, lưu lệnh date vào biến today:

today=$(echo 'date')

Lệnh này sẽ lưu trữ kết quả của lệnh date (ngày giờ hiện tại) vào biến today. Sau đó, bạn thực thi lệnh bằng cách gọi biến:

$today

Kết quả: Lệnh này sẽ hiển thị giá trị của biến today, tức là ngày giờ hiện tại.

Kết quả hiển thị ngày giờ thực của biến today
Kết quả hiển thị ngày giờ thực của biến today

Vietnix – Nhà cung cấp Dịch vụ Hosting và VPS chất lượng cao

Vietnix là nhà cung cấp các dịch vụ Hosting và VPS với hơn 12 năm kinh nghiệm trong ngành, tự hào mang đến cho bạn những giải pháp công nghệ vượt trội, giúp website hoạt động mượt mà và đạt hiệu suất tối ưu nhất. Với hạ tầng hiện đại và đội ngũ kỹ thuật chuyên nghiệp, Vietnix đảm bảo sự ổn định và an toàn cho dữ liệu của bạn. Liên hệ với Vietnix ngay để được tư vấn!

  • Thông tin liên hệ: Hotline: 18001093
  • Email: sales@vietnix.com.vn
  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
  • Website: https://vietnix.vn/

Qua bài viết này, bạn đã được tìm hiểu về lệnh eval trong Linux, cú pháp và cách sử dụng để thay thế biến, lệnh và thực thi các biểu thức động. Hy vọng những thông tin này sẽ giúp bạn sử dụng lệnh eval một cách hiệu quả và linh hoạt trong các script Bash của mình. Nếu bạn muốn tìm hiểu sâu thêm về các lệnh khác trong Linux, bạn có thể tham khảo các bài dưới đây:

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

Banner group
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

MAXSPEED HOSTING

TĂNG TỐC WEBSITE TOÀN DIỆN

CÔNG NGHỆ ĐỘC QUYỀN

PHẦN CỨNG MẠNH MẼ

HỖ TRỢ 24/7

ĐĂNG KÝ NGAY
Pattern

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

Icon
ĐĂ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

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
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