VPS
Hosting
Email
Máy chủ
Firewall Anti DDoS
Tên Miền
SSL
3
3

Giới thiệu về Linux Shell và Shell Script

72
Lượt xem
Home Lập trình Giới thiệu về Linux Shell và Shell Script

Mỗi khi bạn sử dụng terminal trong Ubuntu, Linux Mint hay bất cứ bản phân phối nào của Linux, bạn luôn tương tác một cách gián tiếp với shell. Vậy shell là gì? Bài viết này sẽ cung cấp mọi kiến thức cơ bản cần biết về Linux Shell và Shell Script.

Khái niệm Kernel là gì?

Kernel là chương trình máy tính cốt lõi của hệ điều hành, có toàn quyền kiểm soát mọi thứ trên hệ thống, trong đó có các tài nguyên quan trọng như: quản lý file, process, I/O, bộ nhớ, thiết bị,…

Kernel là gì?
Kernel là gì?

Vì vậy, có thể xem một hệ thống Linux hoàn chỉnh bao gồm kernel, công cụ và thư viện GNU, cùng với theo đó là những script quản lý và cài đặt.

banner hosting gif

Shell là gì?

Shell là một chương trình đặc biệt cung cấp giao diện người dùng khi sử dụng các dịch vụ của hệ điều hành. Shell nhận lệnh từ con người rồi chuyển sang ngôn ngữ tương ứng của kernel, do đó có thể xem shell là một trình phiên dịch với đầu vào là các thiết bị ngoại vi hoặc file. Khi người dùng đăng nhập hoặc khởi động terminal trong Linux thì shell cũng sẽ được khởi chạy.

Shell là gì?

Shell được phân thành hai loại chính: Command Line ShellGraphical Shell.

Command Line Shell

Shell có thể được truy cập bằng giao diện command line hoặc terminal. Dưới đây là giao diện trong terminal của Ubuntu 16.4:

Việc sử dụng shell command line có thể hơi khó khăn với những người mới vì phải làm việc với nhiều câu lệnh phức tạp. Mặt khác, đây lại là một công cụ vô cùng mạnh mẽ, cho phép lưu trữ và thực thi nhiều file cùng lúc, thậm chí có thể được tự động hóa. Các file này thường được gọi là file batch trong Windows, hoặc Shell script trong Linux/macOS.

Graphical Shell

Graphical shell cung cấp các phương thức thao tác với chương trình dựa trên giao diện GUI, cho phép mở, đóng, di chuyển và điều hướng giữa các cửa sổ. Với cách này, người dùng không cần phải nhập lệnh để thực hiện các thao tác trên hệ thống mà có thể tương tác trực tiếp với chương trình như trên Windows hay Ubuntu.

Hầu hết các shell đều thực hiện cùng một nhiệm vụ, nhưng cung cấp nhiều lệnh và hàm khác nhau để thực hiện. Một số shell có sẵn trên hệ thống Linux gồm có:

  • BASH (Bourne Again Shell) – Shell phổ biến nhất trên Linux, được dùng làm shell đăng nhập mặc định trên Linux và macOS. Ngoài ra người dùng Windows cũng có thể cài đặt shell này nếu cần.
  • CSH (C Shell) – Có cú pháp và cách sử dụng giống với ngôn ngữ lập trình C.
  • KSH (Korn Shell) – Cơ sở cho các thông số kỹ thuật tiêu chuẩn của POSIX Shell.

Shell Scripting là gì?

Shell nhận lệnh từ người dùng để thực thi, tuy nhiên đôi khi ta có thể cần thường xuyên thực hiện một số lệnh, mà việc nhập từng lệnh mỗi khi cần thực thi sẽ tốn rất nhiều thời gian.

Shell cũng có thể lấy input là các lệnh từ file, vì vậy người dùng cũng có thể viết các lệnh này trong file rồi thực thi để tránh việc nhập lại lệnh nhiều lần. Các file này được gọi là Shell Script/Shell Program. Shell script cũng tương tự như các file batch trong MS-DOS, được lưu với phần mở rộng là .sh.

linux shell và shell script

Một shell script có cú pháp tương tự như các ngôn ngữ lập trình nên những người dùng đã có sẵn kinh nghiệm với Python hay C/C++ sẽ làm quen rất nhanh với shell script.

Một shell script bao gồm các thành phần sau:

  • Keyword: if, else, break,...
  • Lệnh: cd, ls, echo, pwd,...
  • Hàm
  • Control flow: if..then..else,...

Vì sao nên sử dụng shell script?

Có rất nhiều lý do khác nhau để sử dụng shell script, chẳng hạn như:

  • Hạn chế việc thực thi code nhiều lần.
  • Dễ dàng backup hệ thống thường xuyên bằng shell script.
  • Giám sát hệ thống.
  • Bổ sung chức năng vào shell.

Bên cạnh đó ta cũng không thể không kể đến các ưu điểm chính của việc sử dụng shell script như:

  • Câu lệnh và cú pháp tương tự như trong command line.
  • Giao diện debug có tính tương tác cao.
Vì sao nên sử dụng shell script?

Mặt khác, shell script lại có tốc độ thực thi không cao, không phù hợp với các tác vụ nặng và phức tạp. Bên cạnh đó, việc sử dụng shell script cũng làm tăng rủi ro dẫn đến lỗi hàng loạt khi thực thi lệnh, vì vậy người dùng phải hết sức cẩn thận khi viết và thay đổi bất kỳ lệnh nào.

Ví dụ về shell scripting

Trong phần cuối cùng của bài viết, hãy cùng xem qua một trường hợp sử dụng shell script đơn giản. Khi làm việc với terminal, việc điều hướng giữa các thư mục đôi khi tốn giá nhiều thời gian và cần sử dụng các câu lệnh lặp đi lặp lại nhiều lần. Giả sử ta cần quay trở về python từ thư mục hiện tại thì sẽ phải thực hiện câu lệnh như dưới đây:

Ví dụ về shell scripting
Ví dụ về shell scripting

Cảm giác rất cồng kềnh đúng không nào? Bây giờ hãy thử tạo một công cụ cho phép điều hướng đến thư mục chỉ bằng cách nhập tên của thư mục đó:

# !/bin/bash

# A simple bash script to move up to desired directory level directly

function jump()
{
	# original value of Internal Field Separator
	OLDIFS=$IFS

	# setting field separator to "/"
	IFS=/

	# converting working path into array of directories in path
	# eg. /my/path/is/like/this
	# into [, my, path, is, like, this]
	path_arr=($PWD)

	# setting IFS to original value
	IFS=$OLDIFS

	local pos=-1

	# ${path_arr[@]} gives all the values in path_arr
	for dir in "${path_arr[@]}"
	do
		# find the number of directories to move up to
		# reach at target directory
		pos=$[$pos+1]
		if [ "$1" = "$dir" ];then

			# length of the path_arr
			dir_in_path=${#path_arr[@]}

			#current working directory
			cwd=$PWD
			limit=$[$dir_in_path-$pos-1]
			for ((i=0; i<limit; i++))
			do
				cwd=$cwd/..
			done
			cd $cwd
			break
		fi
	done
}

Tiếp theo, ta cần chạy lệnh sau để cho phép thực thi shell script:

$ chmod +x path/to/our/file/jump.sh

Để áp dụng cho mọi phiên terminal thì ta phải đưa script này vào file .bashrc – một shell script được chạy bởi Bash, file này được dùng đề thiết lập các biến, hàm, alias, định nghĩa các thiết lập muốn sử dụng khi mở một cửa sổ terminal bất kỳ.

Mở terminal rồi chạy lệnh sau:

$ echo “source ~/path/to/our/file/jump.sh”>> ~/.bashrc

Bây giờ ta có thể thử dùng lệnh jump vừa định nghĩa ở trên:

$ jump dir_name

Vậy là ta đã rút gọn việc sử dụng lệnh cd nhiều lần bằng shell scripting. Tất nhiên khả năng của shell scripting còn có thể được mở rộng hơn nữa, các bạn đọc hãy thử tự khám phá nhé!

Lời kết

Bài viết này đã cung cấp những kiến thức cơ bản về Linux shell và một công cụ vô cùng tiện lợi là Shell Script. Nếu có bất kỳ câu hỏi nào thì hãy để lại ở phần comment ở bên dưới để được giải đáp nhanh chóng nhé!

Chia sẻ bài viết
Đánh giá
Kết nối với mình qua
Mình là Bo - admin của Quản Trị Linux. Mình đã có 10 năm làm việc trong mảng System, Network, Security và đã trải nghiệm qua các chứng chỉ như CCNP, CISSP, CISA, đặc biệt là chống tấn công DDoS. Gần đây mình trải nghiệm thêm Digital Marketing và đã hòan thành chứng chỉ CDMP của PearsonVUE. Mình rất thích được chia sẻ và hỗ trợ cho mọi người, nhất là các bạn sinh viên. Hãy kết nối với mình nhé!
Đăng ký nhận tin
Để không bỏ sót bất kỳ tin tức hoặc chương trình khuyến mãi từ Vietnix
Bài viết liên quan
Bình luận
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
Yêu cầu Vietnix gọi lại

Vui lòng nhập thông tin để chúng tôi liên hệ lại với bạn