Kiến thức cơ bản về Shell Scripts#
1. Script là gì?#
Script là mã kịch bản, là bản thảo viết theo ngôn ngữ máy tính.
Là một loại chương trình của máy tính, sẽ tự động hóa hoặc lược bỏ quy trình tạo file có khả năng chạy hoặc biến đổi đến ngôn ngữ máy tính. Script là chương trình mà có thể chạy ngay khi bạn viết source code. Ngôn ngữ script chính là ngôn ngữ lập trình mà có thể chạy chương trình trên.
2. Shell script là gì?#
Shell là chương trình giao tiếp với người dùng, chấp nhận các lệnh từ bạn (keyboard) và thực thi chúng. Nếu bạn muốn sử dụng nhiều lệnh chỉ bằng một lệnh, bạn có thể lưu chuỗi lệnh vào file văn bản và bảo shell thực thi file này thay vì nhập từng lệnh. Điều này được gọi là shell script.
Shell script có thể nhận input từ người dùng, file hoặc output từ màn hình và rất tiện lợi để tạo nhóm lệnh riêng, giúp tiết kiệm thời gian và tự động hóa một số công việc thường xuyên.
3. 'Hello world' script.#
Viết script helloworld đơn giản và thiết lập quyền thực thi cho nó bằng lệnh chmod +x helloworld. Sau đó gõ đường dẫn tới file script để thực thi.
4. She-bang#
She-bang là hai ký tự #! ở đầu một script để thông báo cho shell biết phải chạy script với shell nào (ví dụ: bash shell).
- Bash shell:
#!/bin/bash - Korn shell:
#!/bin/ksh
5. Chạy script với source#
Khi chạy một script, nó sẽ chạy trong một shell con. Nếu muốn chạy script trong shell hiện tại, bạn có thể dùng lệnh source.
6. test []#
Lệnh test kiểm tra tính đúng hoặc sai của một điều kiện bằng cách trả về mã 0 hoặc 1. Có thể kết hợp test với && và || để đưa ra kết quả true hoặc false.
Câu lệnh test cũng có thể thay thế bằng [ ]:
Một số tùy chọn của test:
[ -d foo ]: Thư mụcfoocó tồn tại không?[ -e bar ]: Filebarcó tồn tại không?[ '/etc' = $PWD ]: Chuỗi/etccó bằng biếnPWDkhông?[ $1 != 'secret' ]: Tham số đầu tiên có khác 'secret' không?[ 55 -lt $bar ]: 55 có nhỏ hơn giá trị của$barkhông?[ $foo -ge 1000 ]: Giá trị của$foocó lớn hơn hoặc bằng 1000 không?[ "abc" < $bar ]: Chuỗi "abc" có đứng trước giá trị của$barkhông?[ -f foo ]:foocó phải là file thông thường không?[ -r bar ]:barcó phải là file có thể đọc không?[ foo -nt bar ]: Filefoocó mới hơn filebarkhông?[ -o nounset ]: Tùy chọn shellnounsetcó được thiết lập không?
7. if then else#
Cấu trúc if then else giúp thực thi các lệnh tùy theo điều kiện. Ví dụ sau kiểm tra xem file "abc" có tồn tại hay không và in ra kết quả:
Bạn cũng có thể sử dụng elif để đặt điều kiện tiếp theo nếu điều kiện trước không thỏa mãn.
8. Vòng lặp#
Ví dụ về vòng lặp for trong bash:
Ngoài for, còn có thể sử dụng các vòng lặp khác như while và until.
Tài liệu học nâng cao#
9. Viết script kiểm tra và cài đặt package trên hệ thống#
Yêu cầu: Cho danh sách các package wget, curl, mtr, httpd. Viết bash script kiểm tra các package đã được cài đặt trên hệ thống hay chưa và cài đặt những package chưa được cài đặt.
- Tạo và chỉnh sửa file script với lệnh
vi install-package.sh
#!/bin/bash
# Chạy script trên CentOS 7 và dưới quyền user root
# Khai báo mảng chứa các package để kiểm tra và cài đặt:
package_array=(wget curl httpd mtr)
# Dùng vòng lặp for để xử lý từng phần tử trong mảng.
for package in "${package_array[@]}"
do
echo "Kiểm tra $package trên hệ thống"
sleep 2
if rpm -q $package # Kiểm tra package đã được cài chưa
then
echo "$package đã được cài đặt"
else
echo "$package chưa được cài đặt"
sleep 1
echo "Tiến hành cài đặt $package"
yum install -y $package
fi
echo ========================================
done
echo "End of Script"
- Thiết lập quyền thực thi cho script:
chmod +x install-package.sh




