So sánh trong shell

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 world

Trướ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/bash

Dò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.sh

Kết quả

Hello world

Ngoài ra các bạn có thể cấp quyền thực thi cho file này bằng lệnh

chmod +x script.sh

và chạy

./script.sh

Kế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 $NAME

Kết quả

Quang Phu

Biế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ụ :

#! /bin/bash echo "My name is $NAME" $NAME="Quang Phu" echo "My name is $NAME"

Kết quả

My name is My name is Quang Phu

3. 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

Cú pháp Công dụng
$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 2

Kế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 fi

hoặc

if [ ... ]; then else fi

Ví dụ :

#! /bin/bash if [ $1 -lt "0" ] then echo "X is less than zero" fi if [ $1 -gt "0" ]; then echo "X is more than zero" fi

Chạy

./script.sh 1000

Kết quả

X is more than zero

Khá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ố

Toán tử Ý nghĩa Ví dụ
-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

Toán tử Ý nghĩa Ví dụ
= 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

Toán tử Ý nghĩa Ví dụ
-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 done

Ví dụ :

for [[ c=1; c

Chủ Đề