Tập lệnh Shell là một phần quan trọng của quá trình tự động hóa trong Linux. Scripting giúp bạn viết một chuỗi các lệnh trong một tệp và sau đó thực thi chúng.
Điều này giúp bạn tiết kiệm thời gian vì bạn không phải viết đi viết lại một số lệnh nhất định. Bạn có thể thực hiện các công việc hàng ngày một cách hiệu quả và thậm chí lên lịch để chúng thực hiện tự động.
Bạn cũng có thể đặt một số tập lệnh nhất định để thực thi khi khởi động, chẳng hạn như hiển thị một thông báo cụ thể về việc khởi chạy một phiên mới hoặc đặt các biến môi trường nhất định.
Các ứng dụng và cách sử dụng tập lệnh có rất nhiều, vì vậy hãy đi sâu vào.
Trong bài này, bạn sẽ học:
- bash shell là gì?
- Tập lệnh bash là gì và bạn xác định nó như thế nào?
- Cách tạo và thực thi tập lệnh bash đầu tiên của bạn.
- Cú pháp cơ bản của kịch bản shell.
- Cách xem các tập lệnh đã lên lịch của hệ thống.
- Cách tự động hóa các tập lệnh bằng cách lên lịch thông qua các công việc cron.
Cách tốt nhất để học là thực hành. Tôi rất khuyến khích bạn làm theo bằng cách sử dụng Replit. Bạn có thể truy cập một trình bao Linux đang chạy trong vòng vài phút.
Giới thiệu về Bash Shell
Dòng lệnh Linux được cung cấp bởi một chương trình gọi là shell. Trong những năm qua, chương trình shell đã phát triển để phục vụ cho nhiều tùy chọn khác nhau.
Những người dùng khác nhau có thể được cấu hình để sử dụng các trình bao khác nhau. Nhưng hầu hết người dùng thích gắn bó với trình bao mặc định hiện tại. Vỏ mặc định cho nhiều bản phân phối Linux là GNU Bourne-Again Shell (bash). Bash được thành công bởi Bourne shell (sh
).
Khi bạn khởi chạy trình bao lần đầu tiên, nó sử dụng tập lệnh khởi động nằm trong .bashrc
hoặc .bash_profile
tệp cho phép bạn tùy chỉnh hành vi của trình bao.
Khi một shell được sử dụng tương tác, nó sẽ hiển thị $
khi nó đang đợi lệnh từ người dùng. Đây được gọi là dấu nhắc trình bao.
[username@host ~]$
Nếu shell đang chạy dưới dạng root, lời nhắc sẽ được thay đổi thành #
. Lời nhắc trình bao siêu người dùng trông giống như sau:
[root@host ~]#
Bash rất mạnh mẽ vì nó có thể đơn giản hóa một số hoạt động khó thực hiện một cách hiệu quả với GUI. Hãy nhớ rằng hầu hết các máy chủ không có GUI và tốt nhất là học cách sử dụng sức mạnh của giao diện dòng lệnh (CLI).
Tập lệnh Bash là gì?
Tập lệnh bash là một chuỗi các lệnh được viết trong một tệp. Chúng được đọc và thực thi bởi chương trình bash. Chương trình thực hiện từng dòng một.
Ví dụ:bạn có thể điều hướng đến một đường dẫn nhất định, tạo một thư mục và tạo ra một quy trình bên trong nó bằng dòng lệnh.
Bạn có thể thực hiện trình tự các bước tương tự bằng cách lưu các lệnh trong một tập lệnh bash và chạy nó. Bạn có thể chạy tập lệnh bất kỳ số lần nào.
Làm cách nào để bạn xác định tập lệnh Bash?
Phần mở rộng của tệp .sh
.
Theo quy ước đặt tên, tập lệnh bash kết thúc bằng .sh
. Tuy nhiên, các tập lệnh bash có thể chạy hoàn toàn tốt mà không cần sh
sự mở rộng.
Tập lệnh bắt đầu bằng một tiếng nổ nhỏ.
Tập lệnh cũng được xác định bằng shebang
. Shebang là sự kết hợp của bash #
và bang !
theo đường dẫn bash shell. Đây là dòng đầu tiên của script. Shebang ra lệnh cho shell thực thi nó thông qua bash shell. Shebang chỉ đơn giản là một đường dẫn tuyệt đối đến trình thông dịch bash.
Dưới đây là một ví dụ về câu lệnh shebang.
#! /bin/bash
Đường dẫn của chương trình bash có thể khác nhau. Chúng ta sẽ xem cách xác định nó ở phần sau.
Quyền thực thi
Các tập lệnh có quyền thực thi cho người dùng thực thi chúng.
Quyền thực thi được đại diện bởi x
. Trong ví dụ bên dưới, người dùng của tôi có rwx
quyền (đọc, ghi, thực thi) đối với tệp test_script.sh
Màu của tệp
Các tập lệnh có thể thực thi xuất hiện với màu khác với phần còn lại của các tệp và thư mục.
Trong trường hợp của tôi, các tập lệnh có quyền thực thi sẽ có màu xanh lục.
Cách tạo tập lệnh Bash đầu tiên của bạn
Hãy tạo một tập lệnh đơn giản trong bash xuất ra Hello World
.
Tạo một tệp có tên hello_world.sh
touch hello_world.sh
Tìm đường dẫn đến bash shell của bạn.
which bash
Trong trường hợp của tôi, đường dẫn là /usr/bin/bash
và tôi sẽ đưa điều này vào shebang.
Viết lệnh.
Chúng tôi sẽ echo
"xin chào thế giới" với bảng điều khiển.
Tập lệnh của chúng tôi sẽ trông giống như sau:
#! usr/bin/bash
echo "Hello World"
Chỉnh sửa tệp hello_world.sh
bằng cách sử dụng trình soạn thảo văn bản mà bạn chọn và thêm các dòng trên vào đó.
Cung cấp quyền Thực thi cho Người dùng của bạn.
Sửa đổi quyền đối với tệp và cho phép thực thi tập lệnh bằng cách sử dụng lệnh bên dưới:
chmod u+x hello_world.sh
chmod
sửa đổi các quyền hiện có của tệp cho một người dùng cụ thể. Chúng tôi đang thêm +x
tới người dùng u
.
Chạy tập lệnh.
Bạn có thể chạy tập lệnh theo những cách sau:
./hello_world.sh
bash hello_world.sh
.
Đây là kết quả đầu ra:
Cú pháp cơ bản của Bash Scripting
Cũng giống như bất kỳ ngôn ngữ lập trình nào khác, bash scripting tuân theo một tập hợp các quy tắc để tạo ra các chương trình mà máy tính có thể hiểu được. Trong phần này, chúng ta sẽ nghiên cứu cú pháp của bash scripting.
Cách xác định biến
Chúng ta có thể xác định một biến bằng cách sử dụng cú pháp variable_name=value
. Để nhận giá trị của biến, hãy thêm $
trước biến.
#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name
Tux cũng là tên của linh vật Linux, chim cánh cụt.
Biểu thức số học
Dưới đây là các toán tử được bash hỗ trợ cho các phép tính toán học:
Nhà điều hànhCách sử dụng | |
---|---|
+ | bổ sung |
- | phép trừ |
* | phép nhân |
/ | bộ phận |
** | lũy thừa |
% | mô-đun |
Hãy chạy một vài ví dụ.
Biểu thức số cũng có thể được tính toán và lưu trữ trong một biến bằng cú pháp dưới đây:
var=$((expression))
Hãy thử một ví dụ.
#!/bin/bash
var=$((3+9))
echo $var
Các phân số không được tính toán chính xác bằng cách sử dụng các phương pháp trên và bị cắt ngắn.
Đối với các phép tính thập phân , chúng ta có thể sử dụng bc
lệnh để nhận kết quả đến một số vị trí thập phân cụ thể. bc
(Bash Calculator) là một máy tính dòng lệnh hỗ trợ tính toán lên đến một số điểm thập phân nhất định.
echo "scale=2;22/7" | bc
Tỷ lệ scale
xác định số vị trí thập phân cần thiết trong đầu ra.
Cách đọc thông tin nhập của người dùng
Đôi khi bạn sẽ cần thu thập thông tin đầu vào của người dùng và thực hiện các thao tác có liên quan.
Trong bash, chúng tôi có thể lấy thông tin đầu vào của người dùng bằng cách sử dụng read
lệnh.
read variable_name
Để nhắc người dùng bằng một thông báo tùy chỉnh, hãy sử dụng -p
cờ.
read -p "Enter your age" variable_name
Ví dụ:
#!/bin/bash
echo "Enter a numner"
read a
echo "Enter a numner"
read b
var=$((a+b))
echo $var
Toán tử lôgic So sánh Số
So sánh được sử dụng để kiểm tra xem các câu lệnh có đánh giá thành true
hay không hoặc false
. Chúng ta có thể sử dụng các toán tử được hiển thị bên dưới để so sánh hai câu lệnh:
Hoạt động | Cú pháp | Giải thích |
---|---|---|
Bình đẳng | num1 -eq num2 | là num1 bằng num2 |
Lớn hơn bằng | num1 -ge num2 | là num1 lớn hơn num2 |
Lớn hơn | num1 -gt num2 | num1 lớn hơn num2 |
Nhỏ hơn bằng | num1 -le num2 | là num1 nhỏ hơn num2 |
Nhỏ hơn | num1 -lt num2 | nhỏ hơn num1 num2 |
Không bằng | num1 -ne num2 | là num1 không bằng num2 |
Cú pháp :
if [ conditions ]
then
commands
fi
Ví dụ :
Hãy so sánh hai số và tìm mối quan hệ của chúng:
read x
read y
if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi
Đầu ra:
Tuyên bố có điều kiện (Ra quyết định)
Điều kiện là các biểu thức đánh giá thành một biểu thức boolean (true
hoặc false
). Để kiểm tra các điều kiện, chúng ta có thể sử dụng if
, if-else
, if-elif-else
và các điều kiện lồng nhau.
Cấu trúc của câu lệnh điều kiện như sau:
-
if...then...fi
tuyên bố -
if...then...else...fi
tuyên bố -
if..elif..else..fi
-
if..then..else..if..then..fi..fi..
(Các điều kiện lồng nhau)
Cú pháp :
if [[ condition ]]
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
Để tạo các so sánh có ý nghĩa, chúng ta có thể sử dụng AND -a
và HOẶC -o
nữa.
Câu lệnh dưới đây được dịch thành:If a
lớn hơn 40 và b
nhỏ hơn 6.
if [ $a -gt 40 -a $b -lt 6 ]
Ví dụ :Hãy tìm kiểu tam giác bằng cách đọc độ dài các cạnh của nó.
read a
read b
read c
if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL
elif [ $a == $b -o $b == $c -o $a == $c ]
then
echo ISOSCELES
else
echo SCALENE
fi
Đầu ra :
Trường hợp thử nghiệm # 1
Trường hợp thử nghiệm # 2
Trường hợp thử nghiệm # 3
Vòng lặp và bỏ qua
Vòng lặp for cho phép bạn thực thi các câu lệnh một số lần cụ thể.
Looping với các số:
Trong ví dụ dưới đây, vòng lặp sẽ lặp lại 5 lần.
#!/bin/bash
for i in {1..5}
do
echo $i
done
Looping với các chuỗi:
Chúng ta cũng có thể lặp lại các chuỗi.
#!/bin/bash
for X in cyan magenta yellow
do
echo $X
done
Vòng lặp trong khi
Trong khi vòng lặp kiểm tra một điều kiện và vòng lặp cho đến khi điều kiện vẫn còn true
. Chúng ta cần cung cấp một câu lệnh bộ đếm tăng bộ đếm để kiểm soát việc thực thi vòng lặp.
Trong ví dụ dưới đây, (( i += 1 ))
là câu lệnh truy cập làm tăng giá trị của i
.
Ví dụ:
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
Đọc tệp
Giả sử chúng ta có một tệp sample_file.txt
như hình dưới đây:
Chúng tôi có thể đọc từng dòng của tệp và in kết quả ra màn hình.
#!/bin/bash
LINE=1
while read -r CURRENT_LINE
do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done < "sample_file.txt"
Đầu ra:
Cách thực hiện các lệnh có dấu tích quay lại
Nếu bạn cần bao gồm đầu ra của một lệnh phức tạp trong tập lệnh của mình, bạn có thể viết câu lệnh bên trong dấu tích phía sau.
Cú pháp:
var =`commands
`
Ví dụ :Giả sử chúng ta muốn nhận đầu ra của danh sách các điểm gắn kết với tmpfs
trong tên của họ. Chúng ta có thể tạo một câu lệnh như sau:df -h | grep tmpfs
.
Để đưa nó vào tập lệnh bash, chúng ta có thể đặt nó trong dấu tích.
#!/bin/bash
var=`df -h | grep tmpfs`
echo $var
Đầu ra:
Cách lấy đối số cho tập lệnh từ dòng lệnh
Có thể đưa ra các đối số cho tập lệnh khi thực thi.
$@
đại diện cho vị trí của các tham số, bắt đầu từ một.
#!/bin/bash
for x in $@
do
echo "Entered arg is $x"
done
Chạy nó như thế này:
./script arg1 arg2
Cách tự động hóa tập lệnh bằng cách lập lịch qua cron Jobs
Cron là một tiện ích lập lịch công việc có mặt trong các hệ thống giống Unix. Bạn có thể lên lịch các công việc để thực hiện hàng ngày, hàng tuần, hàng tháng hoặc vào một thời điểm cụ thể trong ngày. Tự động hóa trong Linux chủ yếu dựa vào các công việc cron.
Dưới đây là cú pháp để lập lịch cắt:
# Cron job example
* * * * * sh /path/to/script.sh
Đây, *
đại diện đại diện cho (các) giờ (các) ngày (các) tháng (các) ngày trong tuần, tương ứng.
Dưới đây là một số ví dụ về lập lịch công việc cron.
LỊCH TRÌNH | GIÁ TRỊ LẬP LỊCH |
---|---|
5 0 * 8 * | Lúc 00:05 tháng 8. |
5 4 * * 6 | Lúc 04:05 Chủ nhật. |
0 22 * * 1-5 | Vào lúc 22:00 vào tất cả các ngày trong tuần từ thứ Hai đến thứ Sáu. |
Bạn có thể tìm hiểu chi tiết về cron trong bài đăng trên blog này.
Cách kiểm tra các tập lệnh hiện có trong hệ thống
Sử dụng crontab
crontab -l
liệt kê các tập lệnh đã được lên lịch cho một người dùng cụ thể.
Sử dụng lệnh find
find
lệnh giúp định vị tệp dựa trên các mẫu nhất định. Vì hầu hết các tập lệnh kết thúc bằng .sh
, chúng ta có thể sử dụng tập lệnh tìm như sau:
find . -type f -name "*.sh"
Ở đâu,
-
.
đại diện cho thư mục hiện tại. Bạn có thể thay đổi đường dẫn cho phù hợp. -
-type f
cho biết rằng loại tệp chúng tôi đang tìm kiếm là tệp dựa trên văn bản. -
*.sh
yêu cầu đối sánh tất cả các tệp kết thúc bằng.sh
.
Nếu bạn muốn đọc chi tiết về lệnh find, hãy xem bài đăng khác của tôi.
Kết thúc
Trong hướng dẫn này, chúng ta đã học những kiến thức cơ bản về kịch bản shell. Chúng tôi đã xem xét các ví dụ và cú pháp có thể giúp chúng tôi viết các chương trình có ý nghĩa.
Điều yêu thích của bạn mà bạn học được từ hướng dẫn này là gì? Hãy cho tôi biết trên Twitter!
Bạn có thể đọc các bài viết khác của tôi tại đây.
Vectơ công việc được tạo bởi macrovector - www.freepik.com