Cơ bản về lập trình Shell

Mở bài 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

Mở bài

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

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

1. Tạo file shell script đơn giản

Đầu tiên các bạn tạo một file là script.sh với nội dung như sau

#! /bin/bashecho 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/bashNAME="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/bashecho"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
[email protected] 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/bashecho"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à [email protected]"

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# if-codeelse# else-codefi

hoặc

if[... ];then# if-codeelse# else-codefi

Ví dụ :

#! /bin/bashif[$1 -lt "0"]thenecho"X is less than zero"fiif[$1 -gt "0"];thenecho"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
-nq 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<=5; c++))doecho"Chào tôi lần $c"done

Kết quả

Chào tôi lần 1
...
Chào tôi lần 5

Hoặc có thể viết cách khác dùng numeric ranges
Ví dụ:

forVARIABLEin12345.. N
do
	command1
	command2
	commandN
done

Trong bash shell chúng ta cũng có các lệnh như break hay là continue được sử dụng trong vòng lặp
Ví dụ

foriin12345doecho$iif[$i -eq "3"];thenbreakfidone

Kết quả

1
2
3

Kết bài

Trên đây là những khái niệm cơ bản trong lập trình shell mà mình muốn giới thiệu tới các bạn, có thể là bây giờ nhiều người chưa thực sự cần dùng tới shell script nhưng trong tương lai rất có khả năng chúng ta tiếp cận với nó, có thể là những người học docker sẽ dùng tới những file shell như thế này.

Vậy nên chúng ta cứ học trước rồi đợi cơ hội và lôi ra sử dụng thôi. Đúng không ạ !!!!

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ