Cách sử dụng lệnh set để lặp lại các lệnh shell

Tác giả: VPS chính hãng 25 tháng 10, 2023

Linux cung cấp tiện ích dòng lệnh “set” tích hợp để in cả biến môi trường và biến shell. Nó hỗ trợ nhiều tùy chọn khác nhau để hiển thị các lệnh đã thực thi và đối số của chúng ở đầu ra nhằm mục đích gỡ lỗi và khắc phục sự cố. Đầu ra hiển thị câu lệnh “enclosed” của các lệnh shell và không tự in ra. Hướng dẫn này giải thích cách sử dụng lệnh “set” để lặp lại các lệnh shell dù chúng có được thực thi hay không.

Lệnh set được sử dụng để làm gì?

Lệnh set là lệnh shell Linux tích hợp để hiển thị và đặt tên cũng như giá trị của các biến môi trường shell và Linux. Trên các hệ điều hành giống Unix, lệnh set hoạt động trong shell Bourne (sh), shell C (csh) và shell Korn (ksh). Sử dụng lệnh set để thay đổi giá trị của các tùy chọn shell và hiển thị các biến trong tập lệnh Bash. Bạn cũng có thể sử dụng nó để gỡ lỗi các tập lệnh Bash, xuất các giá trị từ các tập lệnh shell, chấm dứt các chương trình khi chúng bị lỗi và xử lý các ngoại lệ.

Cú pháp chung cho lệnh set là:

set [options] [arguments]

Trong ngữ cảnh của lệnh set, [options] là các cài đặt hoặc cờ được đặt hoặc không được đặt trong môi trường shell Bash. Sử dụng nó để tác động đến hành vi của các tập lệnh shell đã xác định và giúp thực thi các tác vụ mong muốn:

  • Đặt options bằng cách sử dụng dấu trừ () theo sau là tùy chọn thích hợp.
  • Bỏ đặt options bằng cách sử dụng dấu cộng (+) theo sau là tùy chọn thích hợp.

[arguments] là các tham số vị trí và chúng được gán theo thứ tự với các tham số sau:

$1

$2

$n

Việc không chỉ định bất kỳ tùy chọn hoặc đối số nào sẽ khiến lệnh in tất cả các biến shell.

Lệnh set có ba giá trị Exit:

  • 0. Đánh dấu sự hoàn thành.
  • 1. Thất bại do đối số không hợp lệ.
  • 2. Lỗi dẫn đến thông báo sử dụng, thường là do thiếu đối số.

Khi chúng ta chạy lệnh set mà không có bất kỳ đối số nào, nó sẽ trả về danh sách tất cả các cài đặt hệ thống. Danh sách bao gồm tên và giá trị của tất cả các biến và hàm shell.

Lệnh set dùng để thay đổi giá trị của các tùy chọn shell 

Lệnh set dùng để thay đổi giá trị của các tùy chọn shell

Cách sử dụng lệnh set để lặp lại các lệnh shell

Cách 1: Sử dụng lệnh “set -x”

Tùy chọn “x” của lệnh “set” sẽ bật và tắt tính năng gỡ lỗi trong tập lệnh bash. Nó có thể được sử dụng trong tập lệnh bash hoặc trong thiết bị đầu cuối. Nó đọc từng dòng của tập lệnh và in nó cùng với đối số của nó ở đầu ra.

Hãy xem ý nghĩa thực tế của nó bằng cách sử dụng tập lệnh bash:

Tạo/Mở tập lệnh

Tập lệnh bash “script1.sh” được lấy làm ví dụ trong trình soạn thảo văn bản “nano”:

$ nano script1.sh

Script:

#!/bin/bash
set -x
a=10
echo "$a"
echo "This is the output"

Mô tả Script:

  • #!/bin/bash” biểu thị “Bash Shebang,” sẽ thực thi “script1.sh” trong shell “bash”.
  • Lệnh “set –x” sẽ lặp lại tất cả các lệnh shell của tập lệnh.
  • Biến “a” được khai báo là có giá trị nguyên là “10”.
  • Lệnh “echo” đầu tiên hiển thị giá trị biến “$a” trong khi lệnh “echo” thứ hai sẽ in câu lệnh kèm theo.

Thực thi tập lệnh “script1.sh” trong thiết bị đầu cuối dòng lệnh:

$ ./script1.sh

Đầu ra hiển thị dấu “+” trước mỗi dòng và hiển thị các lệnh shell trong terminal.

Lệnh set sẽ bật và tắt tính năng gỡ lỗi trong tập lệnh bash

Lệnh set sẽ bật và tắt tính năng gỡ lỗi trong tập lệnh bash

Vô hiệu hóa việc in các lệnh Shell

Để tắt một số lệnh, hãy sử dụng tùy chọn “set +x” trước chúng. Trong “script1.sh” được sửa đổi ở trên, hãy sử dụng “set +x” để dừng lặp lại lệnh “echo” cuối cùng:

Script:

#!/bin/bash
set -x                                            #Turn On
a=10
echo "$a"
set +x                                             #Turn Off
echo "This is the output"

Lưu và thoát khỏi tập lệnh.

Chạy “script1.sh” đã sửa đổi:

$ ./script1.sh

Hiện tại, lệnh echo cuối cùng không tự in mà chỉ hiển thị đầu ra của nó.

Cách 2: Sử dụng lệnh “set -v”

v” là một tùy chọn hữu ích khác của tiện ích “set” để in các lệnh shell đầu vào khi chúng được thực thi/đọc. Nó không in bất kỳ ký tự hoặc ký hiệu đặc biệt nào trước mỗi dòng của tập lệnh như lệnh “set -x”.

Hãy xem cách nó hoạt động trong tập lệnh bash để lặp lại các lệnh shell:

Tạo/Mở tập lệnh Bash

program.sh” là một tập lệnh bash hiện có được lấy làm ví dụ trong trình soạn thảo văn bản “nano”:

$ nano program.sh

Script:

#!/bin/bash
set -v
function hello()
{
echo "Hello Linux!"
}
echo "The hello function is correct"

Mô tả Script:

  • set -v: In từng dòng của tập lệnh cùng với các lệnh shell.
  • hello:  Biểu thị một hàm không có đối số có lệnh “echo”.
  • echo: Lệnh cuối cùng trong script để in các câu lệnh kèm theo.

Chạy tập lệnh “program.sh” để kiểm tra kết quả:

$ ./program.sh

Đầu ra hiển thị từng lệnh shell được xác định trong tập lệnh.

=>> Cách để khớp chuỗi chính xác bằng lệnh grep trong Linux

Vô hiệu hóa việc in các lệnh Shell

Tùy chọn “v” của lệnh “set” sẽ vô hiệu hóa việc in lệnh shell. Nó có thể được sử dụng ở bất kỳ vị trí nào trong tập lệnh shell.

Để triển khai thực tế, chúng tôi đã đặt nó trước câu lệnh “echo” cuối cùng trong tập lệnh bash “program.sh” đã sửa đổi:

Script:

#!/bin/bash
set -v                                                           #Turn On
function hello()
{
echo "Hello Linux!"
}
set +v                                                          #Turn Off
echo "The hello function is correct"

Chạy tập lệnh “program.sh”:

$ ./program.sh

Bản thân “set +v” được in do lệnh “set -v” và vô hiệu hóa việc in lệnh echo cuối cùng.

Linux cung cấp các lệnh “set -x” và “set -v” để lặp lại tập hợp lệnh shell đã xác định. Các lựa chọn thay thế của cả hai lệnh này là “set +x” và “set +v” để tắt tính năng in của lệnh shell. Tất cả các lệnh này có thể được thực hiện ở bất kỳ vị trí nào trong tập lệnh shell. Hy vọng hướng dẫn này đã cung cấp các phương pháp hữu ích để có thể lặp lại các lệnh shell trong những mục đích thiết thực của bạn khi sử dụng các loại máy chủ Linux/ VPS Linux. Cảm ơn đã theo dõi bài viết!