Professional Documents
Culture Documents
Bash Shell Script
Bash Shell Script
NHÓM 1
MỤC LỤC
CHƯƠNG 7
SHELL SCRIPT
7.1. Giới thiệu chung
Script là Một chương trình được biên dịch (compiled) chuyển đổi từ ngôn ngữ
cao cấp (ví dụ C++, Java) thành mã máy trước khi chạy. Một script là một chương
trình được giải thích (interpreted) trực tiếp từ mã nguồn.
Bash (Bourne Again SHell) là một ngôn ngữ lập trình và một bộ dịch lệnh
dòng lệnh phổ biến trên Linux. Bash script bao gồm các hướng dẫn tương tự như
các ngôn ngữ lập trình khác, cũng như các lệnh Linux. Bash cho phép định nghĩa
hàm, sử dụng biến và các biến môi trường, và có thể nhận tham số từ người dùng
khi thực thi.
7.2. Hướng dẫn
Mỗi script shell cần bắt đầu bằng một comment chỉ định trình thông dịch sẽ
chạy script: #!bin/bash.
Trước khi thực thi, tệp script phải được phân quyền.
7.2.1. Cách thực thi
Để thực thi tệp tin bash shell, ta dùng lệnh : bash tên_file.sh hoặc ./tên_file
7.2.2. Lỗi thường gặp
1) Command not found: lệnh command không tồn tại
2) Permission denied: Không có quyền truy cập
Trong khi thực hiện chương trình ngoài 2 lỗi trên ra, còn vô số lỗi khác không
thể lường trước được. Hai lỗi trên là hai lỗi cơ bản thường gặp nhất.
7.3. Biến, giá trị gán, tham số
7.3.1. Biến (Variables)
Biến là một vùng bộ nhớ được sử dụng để lưu trữ giá trị dữ liệu. Biến thường lưu
trữ các giá trị như số nguyên, số thực, chuỗi ký tự, hoặc giá trị logic (true/false).
7.3.2. Gán (Assignments)
Gán là quá trình gán một giá trị cho một biến cụ thể.
Cách gán: Biến = giá trị
Ví dụ: X = 1
Lệnh expr thường được sử dụng với 3 phép toán chuỗi: substr, index, length.
1) Substr: dùng để trích xuất một phần của chuỗi.
6
Ví dụ: expr substr “chuỗi” 2 3 ; câu lệnh trích xuất từ ký tự 2 đến ký tự thứ 4
cho kết quả là “huỗ”.
2) Index: dùng để tìm vị trí của một chuỗi con trong chuỗi gốc.
Ví dụ: expr index “Hello World” “World” sẽ trả về 7
3) Length: dùng để tính độ dài của một chuỗi.
Ví dụ: expr length “Hello” sẽ trả về 5.
7.3.3. Tham số (Parameters)
Trong hàm và phương thức, tham số là các giá trị mà hàm hoặc phương thức đó
chấp nhận khi được gọi.
Trong bash shell, các tham số có thể được truy cập trong script bằng cách sử
dụng các biến đặc biệt như $1, $2, $3, …, $n. Trong đó $1 là tham số đầu tiên, $2 là
tham số thứ 2 và cứ tiếp tục như vậy. Ngoài ra, còn có các biến đặc biệt khác: $#, $@;
trong đó $# là số lượng tham số được truyền vào, $@ là tất cả các tham số được truyền
vào.
Ví dụ:
#!/bin/bash
echo "Script này được gọi với $#, tham số là: $@"
echo "Tham số đầu tiên là: $1"
echo "Tham số thứ hai là: $2"
echo "Tham số thứ ba là: $3"
Ví dụ:
#!bin/bash
echo -e "Hello World!\n How are you to day?"
echo -e "January\t February\t March \t April"
echo -e "January\v February\v April"
echo -e "1234\b567"
echo -e "\x40\x65\x6C\x6C\x6F"
echo -e Hello\\World
echo Xin chào Lan, Bạn khỏe không ?
Kết quả thu được như sau :
8
#!bin/bash
read -p "Nhập tên đầy đủ của tập tin: " file
if [ -e "$file" ]; then
echo "Tập tin $file tồn tại." fi
if [ -f "$file" ]; then
echo "$file là một tập tin." fi
if [ -d "$file" ]; then
echo "$file là một thư mục." fi
if [ -r "$file" ]; then
echo "Bạn có quyền đọc tập tin $file." fi
if [ -w "$file" ]; then
echo "Bạn có quyền ghi vào tập tin $file." fi
if [ -x "$file" ]; then
echo "Tập tin $file có thể thực thi." fi
Kết quả nhận được sau khi chạy chương trình sử dụng các điều kiện tập tin:
… *)
Lệnh_mặc_định ;;
Esac
Ví dụ: Nhập vào 1 phép tính giữa 2 số:
#!/bin/bash
if [ $# -ne 3 ]
then echo Illegal input, did not receive 3 parameters
else case $2 in
+) echo $(($1+$3));;
-) echo $(($1-$3));;
m) echo $(($1*$3));;
/) echo $(($1/$3));;
%) echo $(($1%$3));;
*) echo Illegal arithmetic operator;;
esac
fi
done
7.6.4. Vòng lặp select
Sử dụng để hiển thị một menu lựa chọn cho người dùng và chờ đợi phản hồi
của họ.
select item in list
do
# Thực hiện các câu lệnh với mỗi item được chọn
done
7.7. Mảng
Mảng cho phép lưu trữ nhiều giá trị trong một biến duy nhất và truy cập thông
qua chỉ số.
Khai báo mảng: my_array = (value1 value2 value3)
7.7.1. Truy cập vào phần tử mảng
echo ${my_array[0]} : in ra “value1”
echo ${my_array[1]} : in ra “value2”
echo ${my_array[2]} : in ra “value3”
7.7.2. Tập lệnh sử dụng trong mảng
a) Thêm phần tử vào mảng
my_array+=(value4)
b) Tính độ dài của mảng
echo ${#my_array[@]} # In ra số lượng phần tử trong mảng
c) In ra tất cả các phần tử mảng
echo ${my_array[@]} # In ra "value1 value2 value3 value4"
d) Xóa phần tử khỏi mảng
unset my_array[1]
7.8. Chuỗi
Trong bash shell, chuỗi là 1 dãy các ký tự được bao quanh bởi dấu nháy đơn hoặc dấu
nháy kép.
7.8.1. Khai báo và in chuỗi
my_string="Hello, world!"
echo $my_string # In ra "Hello, world!"
7.8.2. Nối chuỗi
first_name="John"
last_name="Doe"
full_name="$first_name $last_name"
12
KẾT LUẬN
Linux là một hệ điều hành mã nguồn mở phổ biến, được phát triển bởi một cộng
đồng toàn cầu.
Shell Script là một tập hợp các lệnh được viết trong một ngôn ngữ shell như
Bash, Sh, hoặc các loại shell khác trên các hệ điều hành Unix hoặc Linux. Shell script
được sử dụng để tự động hóa các nhiệm vụ hoặc quy trình trên máy tính.
Trong chương 7 này tập trung vào các cú pháp cơ bản của Shell script. Bằng cách
kết hợp các cú pháp này, có thể viết các script phức tạp để tự động hóa nhiều tác vụ
khác nhau trên hệ thống.
15