Ngày nay, trong giới IT chúng ta, mọi người được làm việc và tiếp xúc với Unix/Linux khá nhiều vậy nên việc tập làm quen với các câu lệnh trên Unix/Linux chắc k còn xa lạ. Tuy nhiên việc nhớ được những câu lệnh có phần khá là khó nhớ đối với các dân chơi Linux nghiệp dư như mình, hơn nữa nhiều lúc có đến hàng tá các câu lệnh mà mình cần thực hiện liên tiếp và phải lặp đi lặp lại rất nhiều lần, rất mất thời gian.
Và thế là chúng ta cần tìm ngay một thứ đó chính là shell script, nó sẽ giúp chúng ta gom một nhóm các câu lệnh phức tạp vào một file rồi thực thi nó. cascac cascac Một file shell script có extension là .sh dành cho môi trường Linux hoặc .bat dành cho môi trường Windows
Trong bài viết này, mình sẽ giới thiệu cho các bạn về Bash script vì đơn giản nó là một shell thông dụng nhất.
Thân bài
Đầu tiên các bạn tạo một file là script.sh với nội dung như sau
#! /bin/bash echo Hello worldTrước mọi file shell thì chúng ta cần định nghĩa cho file đó biết rằng, file đó sẽ sử dụng shell nào để thực thi, ví dụ như trường hợp trên mình khai báo sử dụng bash shell
#! /bin/bashDòng tiếp theo chúng ta sử dụng lệnh echo để in ra dòng chữ Hello world.
Để thực thi file, các bạn mở terminal lên vào chạy
bash script.shKết quả
Hello worldNgoài ra các bạn có thể cấp quyền thực thi cho file này bằng lệnh
và chạy
./script.shKết quả sẽ tương tự như cách thực thi thứ nhất
2. Biến trong shell script
Giống như bao ngôn ngữ lập trình khác thì shell script cũng có cho mình một thứ gọi là biến. Tuy nhiên khác với cách đặt biến thường thấy ở các ngôn ngữ lập trình thì shell nghiêm ngặt hơn trong cách khai báo biến, shell không cho phép khai báo biến với whitespace.
Khai báo sai :
NAME = "Quang Phu"Cách khai báo đúng
NAME="Quang Phu"Để xuất giá trị của biến ra chúng ta cũng sẽ sử dụng lệnh echo
#! /bin/bash NAME="Quang Phu" echo $NAMEKết quả
Quang PhuBiến ở trong Bash Shell không bắt buộc chúng ta phải định nghĩa trước, lúc bạn xuất giá trị của biến không được định nghĩa chương trình sẽ không bị lỗi tuy nhiên kết quả giá trị trả về của biến đó là một chuỗi rỗng.
Ví dụ :
Kết quả
My name is My name is Quang Phu3. Tham số
Ngoài những biến mà chúng ta tự khai báo ra thì trong shell script cũng cung cấp cho chúng ta kha khá các biến có sẵn với các chức năng khác nhau
$0 | Tên của file mà chúng ta đang thực thi |
$1...$n | Tương ứng lần lượt là các tham số được truyền vào khi thực thi file |
$@ | In ra danh sách các tham số được truyền vào |
$# | Số các tham số được truyền vào |
Ví dụ:
#! /bin/bash echo "Số tham số được truyền vào là $#" echo "Tên file này là $0" echo "Tham số thứ nhất là $1" echo "Tham số thứ hai là $2" echo "Tất cả các tham số là $@"Chạy
./script.sh 1 2Kết quả
Số tham số được truyền vào là 2 Tên file này là ./script.sh Tham số thứ nhất là 1 Tham số thứ hai là 2 Tất cả các tham số là 1 2Đơn giản phải không ạ
4. Lệnh điều kiện
Cú pháp :
if [ ... ] then else fihoặc
if [ ... ]; then else fiVí dụ :
Chạy
./script.sh 1000Kết quả
X is more than zeroKhác với các ngôn ngữ lập trình thì Shell có toán tử khác biệt đôi chút
Toán tử so sánh số
-eq | So sánh bằng | $a -eq $b |
-ne | So sánh khác nhau | $a -ne $b |
-gt | So sánh lớn hơn | $a -gt $b |
-lt | So sánh nhỏ hơn | $a -lt $b |
-ge | So sánh lớn hơn hoặc bằng | $a -ge $b |
-le | So sánh nhỏ hơn hoặc bằng | $a -le $b |
Toán tử so sánh chuỗi
= | So sánh bằng | $a = $b |
!= | So sánh không bằng | $a != $b |
-z | Kiểm tra chuỗi rỗng | -z $a |
-n | Kiểm tra khác rỗng | -n $a |
Toán tử với thư mục/ tệp
-f | Kiểm tra xem có phải file không | -f $file |
-d | Kiểm tra xem có phải thư mục không | -d $directory |
-r | Kiểm tra xem file có đọc [read] được hay không | -r $file |
-w | Kiểm tra xem file có ghi [write] được hay không | -w $file |
-x | Kiểm tra xem file có thực thi [execute] được hay không | -x $file |
-e | Kiểm tra xem file có tồn tại không | -e $file |
-s | Kiểm tra xem file có kích thước lớn hơn 0 không | -s $file |
5. Vòng lặp
Đã có câu lệnh điều kiện thì không thể không có vòng lặp. Vòng lặp trong Shell cũng giống như các ngôn ngữ lập trình khác
Vòng lặp for
Cú pháp tương tự với C/C++ mà các bạn từng tiếp xúc
for [[ EXP1; EXP2; EXP3 ]] do command1 command2 command3 doneVí dụ :
for [[ c=1; c