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.
Nhờ vào scripting, bạn sẽ tiết kiệm được kha khá thời gian do không cần viết đi viết lại những câu lệnh nhất định. Thay vào đó, bạn sẽ thực hiện nó một các tự động hàng ngày, thậm chí còn có thể lên lịch cho nó thực thi.
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 một số biến môi trường nhất định.
Nói về script thì các ứng dụng cũng như cách sử dụng nó có rất nhiều, do đó chúng ta hãy cùng theo dõi bài viết sau đây đề tìm hiểu sâu hơn về nó.
Xem thêm: Bash Script là gì? Vì sao Bash Script lại quan trọng trong lĩnh vực lập trình?
Giới thiệu về Bash Shell
Có thể bạn chưa biết, nhưng các dòng lệnh Linux hoạt được dựa vào chương trình cung cấp Shell. Shell đã phát triển để phục vụ cho nhiều tùy chọn khác nhau trong những năm qua.
Một số người dùng khác nhau có nhu cầu cấu hình để được sử dụng các trình shell khác nhau. Nhưng hầu hết người dùng thích gắn bó với trình shell mặc định hiện tại. Shell 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 shell lần đầu tiên, nó sử dụng tập lệnh khởi động nằm trong tệp .bashrc hoặc .bash_profile cho phép bạn tùy chỉnh hành vi của trình shell.
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 shell.
Xem thêm: Lập trình Shell (Bash script)
Shell types
Có 2 loại shell chính:
- Bourne shell (mặc định có dấu nhắc lệnh là $ như ở trên)
- C shell (dấu nhắc lệnh là %)
Trong Bourne shell còn có các loại khác nhau như:
- Bourne shell (sh)
- Korn shell (ksh)
- Bourne Again shell (bash)
- POSIX shell (sh)
C shell thì có:
- C shell (csh)
- TENEX/TOPS C shell (tcsh)
Bash Script là gì?
Bash Scrip 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 này sẽ thực hiện từng dòng lệnh.
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 các bước tương tự theo trình tự bằng cách lưu các tệp trong một tập lệnh bash và thực thi nó. Tập lệnh được chạy với số lần không giới hạn.
Làm thế nào để bạn xác định một tập lệnh Bash?
1. Phần mở rộng tệp .sh
Theo quy ước đặt tên, các tập lệnh bash thường có đuôi .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ó phần mở rộng sh.
2. Tập lệnh bắt đầu bằng một bang
Tập lệnh còn được xác định với một shebang. Shebang là sự kết hợp giữ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.
3. Quyền thực thi
Các tập lệnh sẽ cấp 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ằng chữ x. Trong ví dụ bên dưới, người dùng sẽ có quyền rwx
(đọc, ghi, thực thi) đối với tệp test_script.sh
4. Màu tệp
Các tập lệnh thực thi xuất hiện với màu khác so với phần còn lại của các tệp và thư mục.
Trong trường hợp này, các tập lệnh có quyền thực thi xuất hiện dưới dạng màu xanh lục.
Biến trong shell
Đặt tên
Như mọi ngôn ngữ khác, tên biến chỉ bao gồm các chữ cái a
đến z
, từ A
đến Z
, chữ số từ 0
tới 9
và dấu _
, tên biến không được bắt đầu bằng chữ số.
Khai báo
variable_name=variable_value
Ví dụ:
A="Nguyễn Văn A"
Sử dụng
A="Nguyễn Văn A"
echo $A
Biến Read-only
Sau khi khai báo biến này, thì giá trị của biến không thể bị thay đổi.
A@bla-bla ~ $ A="Nguyễn Văn A"
A@bla-bla ~ $ readonly A
A@bla-bla ~ $ A="Muốn Thay Tên Khác"
bash: A: readonly variable
Xóa giá trị của biến
A@bla-bla ~ $ b="value"
A@bla-bla ~ $ echo $b
value
A@bla-bla ~ $ unset b
A@bla-bla ~ $ echo $b
A@bla-bla ~ $
Các loại biến
- Biến hệ thống: tạo ra và quản lý bởi system, tên là chữ hoa, ví dụ
A@bla-bla ~ $ echo $SHELL
/bin/bash
A@bla-bla ~ $ echo $TERM
xterm
- Biến do người dùng định nghĩa: tạo ra và quản lý bởi người dùng, tên lung tung, thỏa mãn yêu cầu đặt tên của shell.
Mảng
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
Nếu dùng ksh shell thì có thể khai báo:
set -A array_name value1 value2 ... valuen
Nếu dùng bash shell thì khai báo thế này:
array_name=(value1 ... valuen)
Để sử dụng 1 giá trị trong mảng:
${array_name[index]}
hoặc tất cả giá trị trong mảng:
${array_name[*]}
${array_name[@]}
Ví dụ:
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"
Kết quả:
$./test.sh
First Index: Zara
Second Index: Qadir
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
Các phép toán số học
Để thực hiện các phép toán số học, cần dùng expr
để thực hiện:
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
Kết quả:
Total value : 4
Với $a
có giá trị 10 và $b
có giá trị 20, ta có bảng sau:
Phép tính | Ý nghĩa | Ví dụ |
+ | Phép cộng | expr $a + $b trả kết quả 30 |
– | Phép trừ | expr $a - $b trả kết quả -10 |
* | Phép nhân | expr $a \* $b trả kết quả 200 |
/ | Phép chia | expr $b / $a trả kết quả 2 |
% | Phép chia lấy dư | expr $b % $a trả kết quả 0 |
= | Gán giá trị | a=$b giá trị của b sẽ gán cho $a , giờ $a có giá trị là 20 |
== | So sánh bằng, trả về true nếu 2 biến cùng giá trị | [ $a == $b ] trả về false |
!= | So sánh không bằng, trả về true nếu 2 biến khác giá trị | [ $a == $b ] trả về true |
Phép toán quan hệ
Vẫn với $a
có giá trị 10 và $b
có giá trị 20, ta có bảng sau:
Phép tính | Ý nghĩa | Ví dụ |
-eq | Kiểm tra giá trị 2 toán tử có bằng nhau hay không, bằng thì trả về true | [ $a -eq $b ] trả kết quả không phải là true |
-ne | Kiểm tra giá trị 2 toán tử có bằng nhau hay không, không thì trả về true | [ $a -ne $b ] trả kết quả true |
-gt | Kiểm tra giá trị của toán tử bên trái có lớn hơn giá trị bên phải hay không, có trả về true | [ $a -gt $b ] trả kết quả không phải là true |
-lt | Kiểm tra giá trị của toán tử bên trái có nhỏ hơn giá trị bên phải hay không, có trả về true | [ $a -lt $b ] trả kết quả true |
-ge | Kiểm tra giá trị của toán tử bên trái có lớn hơn hoặc bằng giá trị bên phải hay không, có trả về true | [ $a -ge $b ] trả kết quả không phải là true |
-le | Kiểm tra giá trị của toán tử bên trái có nhỏ hơn hoặc bằng giá trị bên phải hay không, có trả về true | [ $a -le $b ] trả kết quả là true |
Cấu trúc rẽ nhánh
Ví dụ:
#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a == $b ]
then
echo "a is equal to b"
elif [ $a -gt $b ]
then
echo "a is greater than b"
elif [ $a -lt $b ]
then
echo "a is less than b"
else
echo "None of the condition met"
fi
Cấu trúc lặp
Vòng lặp while
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
Vòng lặp for
#!/bin/sh
for var in 0 1 2 3 4 5 6 7 8 9
do
echo $var
done
Vòng lặp until
#!/bin/sh
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
Vòng lặp select
#!/bin/ksh
select DRINK in tea cofee water juice appe all none
do
case $DRINK in
tea|cofee|water|all)
echo "Go to canteen"
;;
juice|appe)
echo "Available at home"
;;
none)
break
;;
*) echo "ERROR: Invalid selection"
;;
esac
done
Kết quả của vòng select
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
Hàm
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
Chạy script
$./test.sh
Hello World
Dùng hàm với parameters:
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2 $3"
}
# Invoke your function
Hello Nguyễn Văn A
Kết quả:
$./test.sh
Hello World Nguyễn Văn A
Lấy kết quả trả về từ hàm
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2 $3"
return 10
}
# Invoke your function
Hello Nguyễn Văn A
# Capture value returnd by last command
ret=$?
echo "Return value is $ret"
Kết quả:
$./test.sh
Hello World Nguyễn Văn A
Return value is 10
Tổng kết
Bài viết trên đây đã giúp các bạn có thêm kiến thức về shell script đồng thời biết cách viết Bash Script một cách cơ bản thông qua các ví dụ thiết thực. Hy vọng các bạn có thể vận dụng nó để viết nên các trương chình có ý nghĩa trong quá trình làm việc của bạn.
Nếu bạn còn gì thắc mắc về shell script, hãy để lại bình luận ở bên dưới, NetworkBoo sẽ trả lời bạn trong thời gian sớm nhất. Hãy đón xem bài viết tiếp theo của tôi về Các ví dụ học Bash Script. Xin cảm ơn!
Một số bài viết liên quan có thể bạn quan tâm:
- Đơn giản hóa tác vụ trong Linux với Bash script (phần 1)
- Đơn giản hóa tác vụ trong Linux với Bash script (phần 2)
- Một vài điều thú vị với bash script
- Cách Tạo Và Sử Dụng Bash Script Cơ Bản Trong Ubuntu
- Cùng học viết Bash Script cơ bản giúp chống tấn công DOS vào website
- Tìm hiểu về ngôn ngữ lập trình AWK: Cách sử dụng AWK trong Bash script
Mọi thắc mắc xin hãy liên hệ
Email: [email protected]