Hướng dẫn sử dụng Linux Bash cho người mới bắt đầu
Học Linux bash giúp chúng ta phát huy hết tiềm năng của nó. Bài viết Hướng dẫn sử dụng Linux Bash cho người mới bắt đầu của FUNiX sẽ giúp các bạn hiểu những điều cơ bản về bash và cách viết một bash script đơn giản.
Table of Contents
>> 4 lợi ích khi chuyển sang hệ điều hành Linux
>> Biến môi trường (Environment Variables) trong Linux là gì
>> Cách đặt địa chỉ IP từ chương trình C trong Linux?
1. Bash là gì?
Bash – Bourne-Again Shell – là một trường cung cấp cho bạn một giao diện với hệ thống Unix và là một chương trình thông dịch ngôn ngữ lệnh. Nó thông dịch một ngôn ngữ lệnh shell và thực hiện các lệnh nhận được.
Để hiểu đầy đủ về bash shell scripting, bạn sẽ cần hiểu hai khía cạnh – shell và scripting.
Shell là một bộ xử lý macro và nó sử dụng các lệnh để tương tác với máy tính. Có nghĩa là shell có thể truy xuất và xử lý dữ liệu hoặc lưu trữ thông tin trên máy tính.
Có hai loại shell chính có sẵn trong hệ thống Unix:
- Bourne-type shell (.sh): Đây là loại shell UNIX ban đầu được AT&T lập trình. Trong Bourne shell lại được phân ra 4 loại là Korn shell (ksh), Bourne shell (sh), POSIX shell (sh) và Bourne-Again shell (bash).
- C shell (.csh): Được lập trình từ ngôn ngữ C, bao gồm nhiều tính năng tương tác như tìm lại lịch sử các lệnh đã dùng và chỉnh sửa các cơ chế hoạt động. Ngoài ra, còn có TENEX C shell (tcsh), một phiên bản được chỉnh sửa và nâng cao của C shell.
Scripting liên quan đến một trình soạn thảo văn bản, giúp biên dịch tất cả các lệnh shell thành một tệp mới có phần mở rộng là .sh .
Nếu muốn tạo một lệnh shell, hãy thực hiện tệp script thay vì làm lệnh theo cách thủ công.
Ví dụ: Sử dụng cron job giúp bạn có thể thực thi script tự động tại bất kỳ thời điểm xác định nào. Nhờ vậy nên bạn không phải nhập và thực hiện từng cái một trên dòng lệnh Linux, giúp tiết kiệm thời gian và tránh những sai lầm trong quá trình thực thi lệnh.
>>> Xem thêm: 10 Lý do hàng đầu để học JavaScript làm ngôn ngữ lập trình nền tảng
2. Vì sao nên sử dụng hàm Bash?
Bash script là một công cụ tuyệt vời để giảm bớt quy trình làm việc, vì chúng sẽ hợp nhất nhiều dòng lệnh dài để thực hiện trong một tệp script duy nhất. Những ưu điểm chi tiết của bash script:
- Thực thi nhiều lệnh với một script duy nhất: Tất cả các lệnh đều có trong một tệp script giúp việc thực thi lệnh dễ dàng hơn. Chỉ cần thực hiện một script duy nhất thay vì phải gõ từng lệnh.
- Tự động hóa nhiệm vụ: Lập kế hoạch thực hiện dựa trên thời gian của cron giúp cho việc thực thi tập lệnh được tự động hóa vào bất kỳ thời điểm xác định nào.
- Các lệnh có cấu trúc tốt: Khi biên soạn các lệnh vào tệp script chúng ta có thể cấu trúc trình tự các lệnh theo chuỗi, để mỗi khi chạy lệnh bằng cách sử dụng bash script, chúng sẽ chạy theo thứ tự hoàn hảo.
- Tính minh bạch: Shell script là một tệp văn bản, nên mọi người có thể mở ra và kiểm tra code một cách dễ dàng. Tuy nhiên nếu bạn chạy lệnh bằng một chương trình khác với ngôn ngữ khác như C++, bạn sẽ cần truy cập code nguồn.
- Có thể chuyển nhượng: Nếu các lệnh shell đã có sẵn trong một hệ điều hành khác, chúng ta có thể chuyển một bash script sang hệ điều hành đó dựa trên Unix khác.
Linux Bash có sẵn trên hầu hết các loại hệ điều hành Unix và không yêu cầu bất kỳ cài đặt riêng biệt nào. Để kiểm tra danh sách các shell có sẵn trong hệ điều hành Unix, hãy nhập lệnh sau:
cat/etc/shells
Đầu ra sẽ hiển thị một danh sách như sau:
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh
3. Bash Scripting
Chúng ta sẽ cần một dòng lệnh Linux bash, còn được gọi là một thiết bị đầu cuối Linux. Đó là một chương trình có chứa shell và cho phép bạn thực thi các bash script.
Sử dụng trình soạn thảo văn bản để viết lệnh và biên soạn chúng trong tệp script .sh, có thể sử dụng trình soạn thảo văn bản UNIX như VIM hoặc GNU Nano.
Lưu ý: Nếu muốn chạy bash scrip trên máy chủ VPS, bạn cần có quyền truy cập SSH vào máy chủ VPS của mình.
Linux có một hướng dẫn sử dụng lệnh chung cho bash. Trong đó chứa đầy đủ thông tin về bash, bao gồm mô tả về tất cả các thuật ngữ kỹ thuật và các biến shell tiêu chuẩn.
Để hiển thị hướng dẫn đó hãy nhập và thực hiện lệnh sau:
man bash
Bước tiếp theo là tạo tệp .sh bằng trình soạn thảo văn bản. Chúng ta sẽ sử dụng trình soạn thảo văn bản VIM để tạo tệp .sh như sau:
vim sampleFunction. sh
Tệp .sh sẽ được gửi đến các lệnh Linux bash để chỉnh sửa và thực thi. Mỗi bash shell script cần bắt đầu bằng #!, tiếp đến là đường dẫn của bash. Để hiển thị đường dẫn của bash script hãy nhập lệnh sau:
which bash
Sẽ tạo ra kết quả sau:
/bin/bash
Đây là các bước thực hành tiêu chuẩn cho đường dẫn bash trong hầu hết các hệ điều hành Unix. Do đó, để shell biết rằng nó sẽ chạy lệnh bằng cách sử dụng bash, hãy bắt đầu script bằng lệnh sau:
#!/bin/bash
Lưu ý: Sau khi sử dụng trình soạn thảo văn bản VIM, nhấn ESC để vào lệnh, sau đó gõ wq để lưu và thoát.
Chúng ta sẽ tìm hiểu chi tiết về một số lệnh Linux bash.
3.1 Các nhận xét
Trong quá trình thực thi script, các lệnh nhận xét giúp bất kỳ ai đọc tệp script đều hiểu được cách hoạt động của mỗi dòng lệnh mà chúng ta không cần phân tích cú pháp.
Có hai cách để thêm nhận xét vào bash script. Phương pháp đầu tiên là sử dụng # để nhận xét một dòng.
#!/bin/bash
#Command below prints a Hello World text
echo “Hello, world!”
Phương pháp thứ hai là sử dụng : theo sau là dấu ‘ . Phương pháp này hoạt động đối với các nhận xét cho nhiều dòng.
#!/bin/bash
read a
: ‘
Check the input number is
less than 10 or greater than 10 or equal to 10
‘
if [[ $a -lt 10]]
then
echo “The number is less than 10”
elif [[$a -gt 10]]
then
echo “The number is greater than 10”
else
echo “The number is equal to 10”
fi
3.2 Các biến
Biến là ký hiệu đại diện cho một ký tự, chuỗi ký tự hoặc số. Bạn chỉ cần nhập tên biến vào một dòng lệnh trong Linux bash để sử dụng các chuỗi hoặc số đã xác định.
Đầu tiên, phải gán biến bằng cách nhập tên biến và giá trị chuỗi như ví dụ sau:
testvar=“This is a test variable”
Testvar sẽ là tên của biến và “This is a test variable” là giá trị chuỗi. Khi gán biến hãy sử dụng một tên biến dễ nhớ và đại diện cho giá trị của nó.
Để đọc giá trị biến trong một dòng lệnh, hãy sử dụng ký hiệu $ ở đầu tên biến. Ví dụ:
#!/bin/bash
testvar=“This is a test variable”
echo $testvar
Đầu ra của lệnh đó phải là:
This is a test variable
Đây là do dòng lệnh thứ hai sử dụng echo để in ra giá trị của testvar.
Chúng ta có thể nhập một giá trị chuỗi bằng cách sử dụng lệnh read và làm cho script so sánh hai giá trị từ các biến khác nhau như sau:
#!/bin/bash
echo “Enter a number”
read a #The value entered in this command line will be stored as variable a
b=50 #The value of variable b
if [[$a -eq $b]]
then
echo “Same number”
else
echo “Different number”
fi
Đầu ra của script đó sẽ như sau:
Enter a number
20
Different Number
Lưu ý rằng giá trị đầu vào tương tác ở dòng 3 trở thành biến a .
Vì script so sánh biến a có giá trị là 20 và biến b có giá trị là 50 nên script sẽ in ra văn bản Different number như được định nghĩa trong scrip.
Tuy nhiên, nếu giá trị đầu vào tương tác là 50, thì đầu ra sẽ là:
Enter a number
50
Same number
3.3 Echo
Echo là một lệnh nổi tiếng trong ngôn ngữ lập trình. Có thể sử dụng nhiều tùy chọn khác nhau với echo để in đầu ra trong thiết bị đầu cuối.
Việc sử dụng echo đầu tiên và phổ biến nhất trong Linux bash là xuất ra một văn bản chuẩn:
echo “This is the text”
Đầu ra của lệnh đó là “This is the text”. Khi bạn sử dụng lệnh echo như thế này, thiết bị đầu cuối sẽ nhập một dòng mới bên dưới dòng đó theo mặc định. Nếu muốn lặp lại một đầu ra mà không có dòng mới, bạn có thể sử dụng -n.
echo -n “This is the text”
Để in đầu ra ở một dòng mới, sử dụng \n . Để bật dấu gạch chéo ngược (\), cần dùng -e .
echo -e “This \nis \nthe \ntext”
Đầu ra của lệnh đó sẽ như sau:
This
is
the
text
Tùy chọn \t thêm không gian tab ngang:
echo -e “\tThis is the text”
Đầu ra của lệnh sau sẽ thụt lề văn bản sang bên phải:
This is the text
Chúng ta cũng có thể kết hợp hai tùy chọn. Ví dụ: kết hợp \n và \t để làm cho văn bản được in ở một dòng mới và được thụt vào bên phải:
echo -e “\ n \ t This \ n \ tis \ n \ tthe \ n \ ttext”
Đầu ra của lệnh đó sẽ giống như sau:
This
is
the
text
>>> Xem thêm: Sự khác biệt chính giữa JavaScript và Python bạn đã biết?
3.4 Các hàm
Một hàm biên soạn một tập hợp các lệnh thành một nhóm. Nếu cần thực hiện lại lệnh, bạn chỉ cần viết hàm thay vì viết toàn bộ lệnh trong Linux bash.
Có một số cách viết hàm.
Cách đầu tiên là bắt đầu bằng tên hàm và theo sau là dấu ngoặc đơn:
function_name () {
first command
second command
}
Hoặc nếu bạn muốn viết nó trong một dòng lệnh:
function_name () { first command; second command; }
Phương pháp thứ hai để viết một hàm là sử dụng từ hàm riêng và theo sau là tên hàm. Điều này sẽ loại bỏ các dấu ngoặc đơn:
function function_name {
first command
second command
}
Phương pháp này cũng có phiên bản đơn dòng đó là:
function function_name { first command; second command; }
Ví dụ, chúng ta có thể viết hai hàm với nhiều lệnh echo :
#!/bin/bash
hello_world () {
echo “Hello, World!”
echo “This is a test function”
}
print_message () {
echo “Let’s learn bash programming”
echo “Enjoy this tutorial”
}
Fi
Lưu ý rằng việc viết hàm như ví dụ trên chỉ xác định hàm và không thực hiện các lệnh chứa trong đó. Để thực thi lệnh, hãy viết tên hàm vào dòng lệnh.
Chúng ta sẽ đặt hai ví dụ ở trên vào một Linux bash script hoàn chỉnh:
#!/bin/bash
#Define a hello world function
hello_world () {
echo “Hello, World!”
echo “This is a test function”
}
#Define a print message function
print_message () {
echo “Let’s learn bash programming”
}
#Execute the hello world function
Hello_world
#Execute the print message function
print_message
fi
Đầu ra của script này sẽ như sau:
Hello, World!
This is a test function
Let’s learn bash programming
Enjoy this tutorial
3.5 Vòng lặp
Vòng lặp sẽ rất hữu ích nếu bạn muốn thực hiện lệnh nhiều lần. Có ba loại vòng lặp mà bạn có thể chạy trong bash – for, while, và until.
Vòng lặp for chạy lệnh cho một list các item:
#!/bin/bash
for item in [list]
Do
[commands]
Done
Ví dụ dưới đây sử dụng vòng lặp for để in tất cả các ngày trong tuần:
#! / bin / bash
for days in Monday Tuesday Wednesday Thursday Friday Saturday Sunday
do
echo “Day: $days”
done
Ở dòng 2 , “days” tự động trở thành một biến, với các giá trị là tên ngày theo sau. Sau đó, trên lệnh echo, chúng ta sử dụng ký hiệu $ để gọi các giá trị của biến.
Đầu ra của script đó sẽ như sau:
Day: Monday
Day: Tuesday
Day: Wednesday
Day: Thursday
Day: Friday
Day: Saturday
Day: Sunday
Lưu ý rằng ngay cả với một dòng lệnh duy nhất trong vòng lặp script, nó sẽ in ra ngoài 7 echo.
Loại vòng lặp tiếp theo trong Linux bash là while. Script sẽ đánh giá điều kiện. Nếu điều kiện là true, nó sẽ tiếp tục thực hiện các lệnh cho đến khi đầu ra không còn đáp ứng điều kiện đã xác định.
#!/bin/bash
while [condition]
do
[commands]
Done
Hãy xem một ví dụ đơn giản liên quan đến một biến và toán tử gia tăng, được ký hiệu là ((++)) :
#!/bin/bash
i=0
while [$i -le 5]
do
echo $i
((i++))
Done
Biến bắt đầu bằng giá trị 0 và toán tử gia tăng sẽ tăng giá trị lên 1. Điều kiện đặt ra là nhỏ hơn hoặc bằng 5, vì vậy lệnh sẽ tiếp tục lặp lại cho đến khi đầu ra đạt đến 5. Đầu ra của script đó sẽ như sau:
0
1
2
3
4
5
Loại vòng lặp cuối cùng là Until, hoạt động ngược với While. Nó sẽ lặp lại lệnh cho đến khi điều kiện sai.
Giả sử chúng ta muốn đầu ra tương tự như ví dụ trên bằng cách sử dụng vòng lặp Until. Chúng ta có thể viết script như sau:
#! / bin / bash
i = 0
until [$i -gt 5]
do
echo $i
((i++))
done
Lệnh này sẽ lặp lại cho đến khi giá trị đầu ra đạt đến 5. Kết quả thu được sẽ giống như vòng lặp While:
0
1
2
3
4
5
3.6 Câu lệnh điều kiện
Nhiều ngôn ngữ lập trình sử dụng các câu lệnh điều kiện như if, then, và else để ra quyết định. Chúng thực hiện lệnh và cung cấp đầu ra tùy thuộc vào các điều kiện. Câu lệnh điều kiện cũng hoạt động trong Linux bash script.
Câu lệnh If được theo sau bởi các biểu thức điều kiện. Sau đó, theo lệnh then để xác định đầu ra theo đúng điều kiện. Các script sẽ thực hiện lệnh nếu điều kiện trong If là true.
Giả sử bạn muốn thực hiện một lệnh khác nếu điều kiện là false. Thay vì sử dụng lệnh then, hãy thêm một câu lệnh khác vào script.
Hãy xem xét một cách đơn giản các câu lệnh if, then, và else. Trước câu lệnh sẽ có một biến để người dùng có thể nhập một giá trị:
#!/bin/bash
echo “Enter a number”
read num
if [[$num -gt 10]]
Then
echo “The number is greater than 10”
Else
echo “The number is not greater than 10”
3.7 Đọc và ghi tệp
Có một số phương pháp trong Linux bash để đọc tập tin, trong đó lệnh cat là phương pháp phổ biến nhất. Lưu ý rằng lệnh này có thể đọc toàn bộ nội dung tập tin.
Để đọc nội dung từng dòng, hãy sử dụng lệnh read và một vòng lặp. Trước khi viết một script để đọc tệp, hãy đảm bảo rằng tập tin đó tồn tại ở vị trí đầu tiên.
Ví dụ: giả sử chúng ta có tệp to-do.txt chứa một to-do list:
Reply email
Finish report
Call clients
Team evaluation
Sử dụng các lệnh cat và read trong bash script để đọc và in nội dung của tệp to-do.txt. Phần đầu tiên của script sẽ sử dụng lệnh cat, trong khi phần thứ hai sẽ sử dụng lệnh read trong một vòng lặp.
#!/bin/bash
echo “Reading the file using cat command”
content=’cat to-do.txt’
echo $contente
echo “Reading the file using read command and loop”
filename=’to-do.txt’
while read line
Do
echo $line
done<$filename
Đầu ra của script như sau:
Reading the file using cat command
Reply email Finish report Call clients Team evaluation
Reading the file using read command and loop
Reply email
Finish report
Call clients
Team evaluation
Để ghi đầu ra lệnh vào một tập tin, hãy sử dụng các toán tử chuyển hướng, được biểu thị bằng các ký hiệu > và >>, theo sau là tên tập tin:
output > filename
output >> filename
Hãy cẩn thận khi chọn nhà điều hành. Nếu tập tin cho trước đã tồn tại, toán tử > sẽ ghi đè nội dung của nó thành độ dài bằng 0 và viết đầu ra. Có nghĩa là bạn sẽ mất nội dung tệp hiện có. Nếu tập tin cho trước không tồn tại, nó sẽ tạo một tệp mới.
Toán tử >> sẽ thêm đầu ra cho bất kỳ tập tin nhất định nào. Nếu tập tin đã tồn tại, nó chỉ cần thêm đầu ra cho nội dung.
Đây là một sự chuyển hướng đơn giản để viết kết quả đầu ra thành tập tin văn bản:
echo “Hello, world!” >> hello_world.txt
Chuyển hướng cũng hoạt động với lệnh read để viết bất kỳ đầu vào tương tác nào. Ví dụ script này sẽ thêm giá trị đầu vào vào tập tin name.txt:
#!/bin/bash
echo “Enter your name”
read Name
echo $Name >> name.txt
Script chuyển hướng đầu ra của biến vào tập tin nên chúng ta sẽ không thấy bất kỳ đầu ra nào được in ra. Để xem kết quả đầu ra bằng cách in nội dung tập tin, hãy thêm dòng lệnh sau để đọc:
echo ‘cat name.txt’
Đảm bảo rằng bạn có quyền đọc và viết trong tập tin để tránh lỗi từ chối cấp quyền. Ngoài ra, nếu bạn muốn viết vào các tập tin đang tồn tại thì hãy đảm bảo nhập đúng tên tập tin.
>>> Xem thêm: Những trung tâm dạy học lập trình java trực tuyến trong vòng 6 tháng
4. Các chức năng cơ bản của Bash
Sau khi hiểu được một số lệnh Linux bash, chúng ta sẽ xem xét một số hàm bash.Bắt đầu với một hàm cơ bản:
#!/bin/bash
testfunction(){
echo “My first function”
}
testfunction
Nếu bạn lưu script này trong testFunction.sh và thực hiện nó dưới dạng ./testFunction.sh, thì bạn sẽ nhìn thấy đầu ra là:
My first function
Echo in kết quả đầu ra trên bảng điều khiển. Nếu bạn hoán đổi vị trí của lệnh định nghĩa hàm với lệnh gọi hàm, nó sẽ cho ra kết quả lỗi:
#!/bin/bash
Testfunction
testfunction(){
echo “My first function”
}
Đoạn mã trên sẽ không hoạt động. Nó gọi hàm ở dòng lệnh thứ hai và định nghĩa hàm ở dòng lệnh thứ ba. Trong trường hợp này, trình thông dịch không thể tìm thấy hàm để thực thi.
Các hàm Linux bash chấp nhận bất kỳ số lượng tham số nào. Ví dụ dưới đây là hai tham số:
#!/bin/bash
testfunction(){
echo $1
echo $2
}
testfunction “Hello” “World”
$ 1 và $ 2 đại diện cho các đối số dòng lệnh, các đầu vào động trong lệnh. Bạn cũng có thể sử dụng các đối số dòng lệnh và thực hiện các hàm bash. Ví dụ:
#!/bin/bash
addition(){
sum=$(($1+$2))
return $sum
}
read -p “Enter a number: ” int1
read -p “Enter a number: ” int2
add $int1 $int2
echo “The result is : ” $?
Phép cộng được gán trong một biến sum và giá trị này được trả về từ hàm. Các hàm Linux bash luôn trả về một giá trị duy nhất. Đầu vào tương tác được thực hiện bằng cách sử dụng read cho cả hai số. Cuối cùng, kết quả được in bằng cách sử dụng $?, nơi lưu trữ giá trị trả về $sum từ hàm.
Xem xét một ví dụ hàm khác về nơi đầu tiên chúng ta tạo một thư mục và sau đó thay đổi đường dẫn để trỏ đến vị trí mới:
sampleFunction () {
mkdir -p $1
cd $1
}
Để xác minh chức năng này chúng ta thực hiện lệnh sau:
sampleFunction myDir
myDir tạo một tên thư mục hợp lệ. Nếu kiểm tra đường dẫn làm việc hiện tại bằng lệnh pwd, bạn sẽ thấy rằng mình hiện đang ở trong myDir mới được tạo.
Ngoài các hàm, các vòng lặp và các câu lệnh điều kiện rất phổ biến trong bash script. Chúng ta sẽ xem xét một số trường hợp sử dụng cả hai trong cùng một script:
#!/bin/bash
isvalid=true
count=1
while [ $isvalid ]
do
echo $count
if [ $count -eq 5 ];
then
break
fi
((count++))
done
Ví dụ trên sử dụng câu lệnh while và if. Vòng lặp while được thực hiện 5 lần sau khi kiểm tra câu lệnh điều kiện.
Đầu ra sẽ là:
1
2
3
4
5
Vòng lặp for có thể tăng và giảm bộ đếm. Ví dụ:
#!/bin/bash
for (( count=10; count>0; count– ))
Do
echo -n “$count “
Done
Đầu ra của vòng lặp for này sẽ là:
10 9 8 7 6 5 4 3 2 1
Với lệnh If, chúng ta cũng có thể định nghĩa khác bằng cách sử dụng elif:
#!/bin/bash
echo “Enter a valid number”
read n
if [ $n -eq 101 ];
then
echo “This is first number”
elif [ $n -eq 510 ];
then
echo “This is second number”
elif [ $n -eq 999 ];
Then
echo “This is third number”
else
echo “No numbers over here”
fi
Chúng ta cũng có thể viết script đó bằng cách sử dụng câu lệnh case. Trong các câu lệnh case, ;; đại diện cho ngắt chữ hoa chữ thường, vì vậy nếu giá trị biến đáp ứng bất kỳ điều kiện nào, nó sẽ chuyển đến cuối script:
#!/bin/bash
echo “Enter a valid number”
read n
case $n in
101)
echo “This is the first number” ;;
510)
echo “This is the second number” ;;
999)
echo “This is the third number” ;;
*)
echo “No numbers over here” ;;
esac
5. Kết luận
Linux bash là một công cụ viết script hữu ích và dễ học cho các hệ điều hành Unix và Linux. Nó giúp hợp nhất nhiều lệnh dài để thực thi vào một tập lệnh duy nhất.
Tìm hiểu thêm về bash tại Funix.edu.vn để viết các script tốt và hiệu quả hơn.
Nguồn tham khảo : https://www.hostinger.com/tutorials/bash-function-tutorial-with-examples/#What_Is_Bash
>>> Nếu bạn đang có nhu cầu tìm hiểu về khóa học lập trình đi làm ngay. Hãy liên hệ với FUNiX ngay tại đây:
>>> Xem thêm bài viết:
Ngôn ngữ lập trình Java: Hướng dẫn cho người mới bắt đầu về Java
Có nên lập trình game bằng C++, C#, Java và JavaScript?
Hỏi đáp về ngôn ngữ JavaScript cùng lập trình viên
Những trung tâm dạy học lập trình java trực tuyến trong vòng 6 tháng
Cách sử dụng Package và Collection có sẵn trong Java
Phạm Thị Thanh Ngọc (theo Hostinger)
Bình luận (0
)