Viết tạo bash script là một trong những cách lập trình máy tính Linux phổ biến và dễ tiếp cận nhất. Những ví dụ về script đơn giản này sẽ giúp bạn hiểu quy trình và giới thiệu cho bạn những kiến thức cơ bản về lập trình Bash.
1. Cách in Hello World trong Bash
Ví dụ Hello World là một cách tuyệt vời để học về bất kỳ ngôn ngữ lập trình nào và Bash cũng không ngoại lệ.
Đây là cách in "Hello World" bằng Bash:
1. Mở trình soạn thảo và bắt đầu chỉnh sửa file mới chứa các dòng code sau.
2. Dòng đầu tiên của Bash script phải luôn trông như thế này:
#!/bin/bash
Lưu ý: Lệnh Shebang (#!/bin/bash) rất cần thiết vì shell sử dụng nó để quyết định cách chạy script. Trong trường hợp này, nó sử dụng trình thông dịch Bash.
3. Bất kỳ dòng nào bắt đầu bằng ký hiệu # đều là một comment. Dòng shebang là trường hợp đặc biệt, nhưng bạn có thể sử dụng comment riêng để giải thích code của mình. Thêm comment trên dòng 2, ví dụ:
# Print some text from a bash script
4. Bạn có thể in ra đầu ra tiêu chuẩn bằng lệnh echo, theo sau là giá trị bạn muốn in. Thêm dòng sau vào dòng 3:
echo "Hello World"
5. Lưu script, tốt nhất là có phần mở rộng .sh, ví dụ, hello_world.sh. Phần mở rộng không phải là một yêu cầu bắt buộc nhưng đó là một quy ước hữu ích để tuân theo.
6. Để chạy script của bạn, hãy làm cho file có thể thực thi được. Sử dụng lệnh chmod ("change mode") cùng với đối số +x ("executable") và tên shell script của bạn:
chmod +x hello_world.sh
7. Sử dụng lệnh này để chạy script từ trong thư mục của nó:
./hello_world.sh
8. Khi script chạy, nó sẽ in dòng chữ " Hello World " trên terminal của bạn:
2. Tạo thư mục bằng cách đọc đầu vào
Từ script của mình, bạn có thể chạy bất kỳ chương trình nào mà bạn thường chạy trên dòng lệnh. Ví dụ, bạn có thể tạo một thư mục mới từ script của mình bằng lệnh mkdir.
1. Bắt đầu với dòng Shebang tương tự như trước:
#!/bin/bash
2. Nhắc người dùng nhập tên thư mục bằng lệnh echo như trước:
echo "Enter new directory name:"
3. Sử dụng lệnh read tích hợp để tìm nạp thông tin đầu vào của người dùng. Đối số duy nhất đặt tên cho một biến mà shell sẽ lưu trữ đầu vào:
read newdir
4. Khi bạn cần sử dụng giá trị được lưu trữ trong một biến, hãy thêm ký hiệu đô la ($ vào trước tên của biến đó). Bạn có thể chuyển nội dung của biến đầu vào làm đối số cho lệnh mkdir để tạo một thư mục mới:
mkdir $newdir
5. Khi bạn chạy script này, nó sẽ nhắc bạn nhập đầu vào. Nhập tên thư mục hợp lệ và bạn sẽ thấy script tạo nó trong thư mục hiện tại của bạn:
3. Tạo thư mục sử dụng đối số dòng lệnh
Thay thế cho việc đọc dữ liệu đầu vào một cách tương tác, hầu hết các lệnh Linux đều hỗ trợ đối số. Bạn có thể cung cấp một đối số khi chạy một chương trình để kiểm soát hành vi của nó.
Trong script của mình, bạn có thể sử dụng $1 để tham chiếu đến một biến đặc biệt chứa giá trị của đối số đầu tiên. $2 sẽ đề cập đến đối số thứ hai, v.v...
1. Tạo một thư mục bằng lệnh mkdir từ ví dụ trước. Tuy nhiên, lần này, hãy sử dụng biến tích hợp $1:
#!/bin/bash
mkdir $1
2. Chạy script, lần này chuyển tên thư mục mới mà bạn đã chọn làm đối số:
./arg_dir.sh Test
Bạn có thể thắc mắc điều gì sẽ xảy ra nếu bạn chạy script mà không cung cấp đối số nào cả. Hãy thử và xem; bạn sẽ nhận được thông báo lỗi bắt đầu "usage: mkdir":
Nếu không có bất kỳ đối số dòng lệnh nào, giá trị $1 sẽ trống. Khi script của bạn gọi mkdir, script sẽ không chuyển đối số cho script đó và lệnh mkdir sẽ trả về lỗi đó. Để tránh điều này, bạn có thể tự kiểm tra tình trạng và đưa ra một lỗi thân thiện hơn:
1. Như mọi khi, hãy bắt đầu với dòng shebang:
#!/bin/bash
2. Trước khi bạn gọi mkdir, hãy kiểm tra đối số đầu tiên trống (tức là không có đối số). Bạn có thể thực hiện việc này bằng câu lệnh if của Bash chạy code dựa trên một điều kiện:
if ["$1" = ""]; then
3. Nếu đối số đầu tiên trống, hãy in lỗi và thoát script của bạn:
echo "Please provide a new directory name as the first argument"
exit
4. Từ khóa "fi" hơi lạ ("if" đảo ngược) báo hiệu sự kết thúc của câu lệnh if trong Bash:
fi
5. Script của bạn bây giờ có thể tiếp tục như trước, để xử lý trường hợp khi có đối số:
mkdir $1
Khi chạy phiên bản script mới này, bạn sẽ nhận được thông báo nếu quên đưa vào đối số:
4. Xóa file bằng hàm Bash
Nếu bạn thấy mình lặp lại cùng một code, hãy cân nhắc việc gói code đó vào một hàm. Sau đó, bạn có thể gọi hàm đó bất cứ khi nào bạn cần.
Đây là một ví dụ về chức năng xóa một file nhất định.
1. Bắt đầu với dòng shebang:
#!/bin/bash
2. Xác định hàm bằng cách viết tên của nó, theo sau là dấu ngoặc đơn trống và các lệnh bên trong dấu ngoặc nhọn:
del_file() {
echo "deleting $1"
rm $1
}
Sau đó, bạn có thể gọi hàm và truyền cho nó tên của file cần xóa:
del_file test.txt
Khi bạn gọi một hàm, nó sẽ đặt giá trị $? đặc biệt với trạng thái exit của lệnh cuối cùng nó chạy. Trạng thái thoát rất hữu ích cho việc kiểm tra lỗi; trong ví dụ này, bạn có thể kiểm tra xem lệnh rm có thành công hay không:
if [ $? -ne 0 ]; then
echo "Sorry, could not delete the file"
fi
5. Tạo một máy tính cơ bản để tính toán số học
Ví dụ cuối cùng này minh họa một máy tính rất cơ bản. Khi chạy nó, bạn sẽ nhập hai giá trị, sau đó chọn một phép toán số học để thực hiện chúng.
Đây là code cho calc.sh:
#!/bin/bash
# Take operands as input
echo "Enter first number: "
read a
echo "Enter second number: "
read b
# Input type of operation
echo "Enter Arithmetic Operation Choice :"
echo "1. Addition"
echo "2. Subtraction"
echo "3. Multiplication"
echo "4. Division"
read choice
# calculator operations
case $choice in
1)
result=`echo $a + $b | bc`
;;
2)
result=`echo $a - $b | bc`
;;
3)
result=`echo $a \* $b | bc`
;;
4)
result=`echo "scale=2; $a / $b" | bc`
;;
esac
echo "Result: $result"
Lưu ý việc sử dụng case ... esac tương đương với câu lệnh switch của Bash từ các ngôn ngữ khác. Nó cho phép bạn kiểm tra một giá trị - trong trường hợp này là biến choice - với một số giá trị cố định và chạy code liên quan.
Script này sử dụng lệnh bc để thực hiện từng phép tính.