Shell script
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. Có nghĩa là shell chấp nhận các lệnh từ bạn (keyboard) và thực thi nó. Nhưng nếu bạn muốn sử dụng nhiều lệnh chỉ bằng một lệnh, thì bạn có thể lưu chuỗi lệnh vào text file và bảo shell thực thi text file này thay vì nhập vào các lệnh. Điều này gọi là shell script.
Là một tập hợp các lệnh được thực thi nối tiếp nhau
Tại sao phải viết shell script:
-
Shell script có thể nhận input từ user, file hoặc output từ màn hình.
-
Tiện lợi để tạo nhóm lệnh riêng.
-
Tiết kiệm thời gian.
-
Tự động làm một vài công việc thường xuyên.
3. ‘Hello world’ script.
Viết script helloworld đơn giản có nội dung:
#!/bin/bash
echo hello world
Sau khi tạo xong script, chúng ta phải cho phép file có quyền thực thi 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 để chạy script ở một shell nào đó. Ví dụ bash shell:
#!/bin/bash
hay Korn shell:
#!/bin/ksh
5.Chạy script với source.
Khi chạy một script, script sẽ chạy trong một shell con.
Nếu muốn chạy script trong shell hiện tại thì có thể dùng lệnh source
:
Cú pháp:
source <script>
hoặc:
. <script>
6.test []
Lệnh test có thể kiểm tra một cái gì đó đúng hay sai bằng cách trả về return code là 0 hoặc 1. Có thể kết hợp test với && và || để đưa ra true or false như ví dụ sau đây:
Câu lệnh test cũng có thể thay thế bằng [ ] như thế này:
Một số tùy chọn của test
[ -d foo ] Thư mục có tồn tại không?
[ -e bar ] Thư mục?
[ '/etc' = $PWD ] Chuỗi /etc có bằng biến PWD không ?
[ $1 != 'secret' ] Is the first parameter different from secret ?
[ 55 -lt $bar ] Is 55 less than the value of $bar ?
[ $foo -ge 1000 ] Is the value of $foo greater or equal to 1000 ?
[ "abc" < $bar ] Does abc sort before the value of $bar ?
[ -f foo ] Is foo a regular file ?
[ -r bar ] Is bar a readable file ?
[ foo -nt bar ] Is file foo newer than file bar ?
[ -o nounset ] Is the shell option nounset set ?
7.if then else.
If then else là cấu trúc lựa chọn. Nếu một điều kiện cụ thể nào đó được đáp ứng, thực thi một cái gì đó, nếu không thực thi một cái khác. Ví dụ sau kiểm tra file “abc” có tồn tại hay không và in ra kết quả:
có thể sử dụng elif
để đặt điều kiện tiếp theo nếu đều kiện trước không thỏa mãn.
8.Vong lặp.
Ví dụ về vòng lặp for
trong bash:
Có thể sử dụng các vong 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 cai đặt.
- Tạo và chỉnh sửa file script :
vi install-package.sh
- Với nội dụng script là:
#!/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 sử dụng 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 #Lệnh if rpm -q $package để kiểm tra xem 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 execute cho script:
chmod +x