Shell là gì?

Shell là một môi trường trong đó chúng ta có thể chạy các lệnh, các chương trình và Shell script. Có các phiên bản khác nhau của Shell, mà chỉ khác nhau từ phiên bản của hệ điều hành. Mỗi phiên bản của Shell có bộ thiết lập các lệnh và hàm được thừa nhận riêng của nó.

Shell cung cấp cho bạn một giao diện với hệ thống Unix. Nó thu thập input từ bạn và chạy các chương trình trên cơ sở đầu vào đó. Khi một chương trình hoàn thành, nó hiển thị kết quả (output) của chương trình đó.

Dòng nhắc lệnh Shell trong Unix/Linux

Dòng nhắc lệnh, $, được thông báo bởi Shell. Trong khi dòng nhắc được hiển thị, bạn có thể nhập một lệnh.

Shell đọc đầu vào bạn nhập sau khi bạn nhấn Enter. Nó xác định lệnh mà bạn muốn chạy bởi nhìn vào từ đầu tiên trong phần nhập của bạn. Một từ là một tập hợp không gián đoạn của các ký tự. Các khoảng trống và tab phân cách các từ.

Dưới đây là một ví dụ đơn giản của lệnh date mà hiển thị ngày và thời gian hiện tại:

$date
Thu Jun 25 08:30:19 MST 2009

Bạn có thể tùy chỉnh dòng nhắc lệnh của mình bằng cách sử dụng biến môi trường PS1 được giải thích trong chương Môi trường làm việc.

Các kiểu Shell trong Unix/Linux

Trong Unix có hai kiểu Shell chính:

  1. Kiểu Bourne Shell. Nếu bạn đang sử dụng một Bourne Shell, dòng nhăc lệnh mặc định là ký tự $.
  2. Kiểu C Shell. Nếu bạn đang sử dụng kiểu C Shell, dòng nhắc mặc định là ký tự %.

Trong kiểu Bourne Shell lại có các kiểu phụ khác như sau:

Bourne Shell (sh)

Korn Shell (ksh)

Bourne Again Shell ( bash)

POSIX Shell ( sh)

Trong kiểu C Shell có các kiểu phụ khác:

C Shell (csh)

TENEX/TOPS C Shell ( tcsh)

Các Unix Shell đầu tiên được ghi vào giữa thập kỷ 1970 bởi Stephen R. Bourne trong khi ông ta đang làm việc tại phòng thí nghiệm AT&T Bell Labs ở New Jersey.

Bourne Shell là Shell đầu tiên xuất hiện trên hệ thống Unix, vì thế nó được đề cập đến như là “the Shell”.

Bourne Shell thường được cài đặt như là /bin/sh trên hầu hết các phiên bản Unix. Vì lý do này, nó là Shell được chọn để viết script dử dụng trên các phiên bản khác nhau của Unix.

Trong chương này, chúng ta đề cập đến hầu hết các khái niệm Shell trên cơ sở Bourne Shell.

Shell Scripts trong Unix/Linux

Khái niệm cơ bản của một Shell script là một danh sách các lệnh, mà được liệt kê theo thứ tự thi hành. Một Shell script tốt sẽ có các lời bình (comment), đứng trước bởi dấu #, miêu tả các bước.

Có các kiểm tra điều kiện, như giá trị A lớn hơn giá trị B, các loop cho phép chúng ta xử lý một lượng lớn dữ liệu, các file để đọc và lưu giữ dữ liệu và các biến để đọc và lưu giữ liệu, và script có thể bao gồm các hàm.

Shell script và các hàm đều được thông dịch. Điều này có nghĩa là chúng không được biên dịch.

Chúng ta chuẩn bị viết nhiều script trong các phần hướng dẫn tiếp theo. Nó có thể là một file văn bản đơn giản trong đó chúng ta đặt tất cả các lệnh và một số cấu trúc cần thiết mà nói cho môi trường Shell về cái gì được làm và khi nào được thực hiện.

Ví dụ về script trong Unix/Linux

Giả sử chúng ta tạo một test.sh. Ghi nhớ rằng tất cả các script nên có đuôi mở rộng .sh. Trước khi bạn thêm bất kỳ cái gì tới script của bạn, bạn cần báo hệ thống rằng một Shell script chuẩn bị được bắt đầu. Việc này được thực hiện bằng cách sử dụng cấu trúc shebang. Ví dụ:

#!/bin/sh

Lệnh này nói cho hệ thống rằng các lệnh theo sau được chạy bởi Bourne Shell. Nó được gọi là một shebang bởi vì ký hiệu # được gọi là một hash và ký hiệu ! được gọi là một bang.

Để tạo một script chứa các lệnh này, đầu tiên bạn đặt dòng shebang và sau đó thêm các lệnh:

#!/bin/bash
pwd
ls

Các lời bình Shell trong Unix/Linux

Bạn có thể đặt các Shell Comment trong script như sau:

#!/bin/bash

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls

Bây giờ bạn lưu nội dung trên và làm cho script này chạy như sau:

$chmod +x test.sh

Bầy giờ bạn có một Shell script của mình sẵn sàng để chạy như sau:

$./test.sh

Điều này tạo ra kết quả sau:

/home/amrood
index.jsp  unix-basic_utilities.jsp  unix-directories.jsp  
test.sh    unix-communication.jsp    unix-environment.jsp

Ghi chú: Để chạy bất cứ chương trình nào của bạn có trong thư mục hiện tại, bạn nên chạy bằng cách sử dụng ./program_name

Shell script mở rộng trong Unix/Linux

Shell script có một vài cấu trúc được yêu cầu mà nói cho môi trường Shell về điều gì để làm và khi nào thực hiện nó. Tất nhiên, hầu hết script ở đây phức tạp hơn những script đã giới thiệu ở trên.

Shell là một ngôn ngữ chương trình thực sự, đầy đủ với các biến, các cấu trúc điều khiển và… Dù nó có phức tạp bao nhiêu, thì tuy nhiên, nó vẫn chỉ là một danh sách lệnh được thực thi một cách liên tục.

Các script sau sử dụng lệnh read mà nhận đầu vào từ bàn phím và gán giá trị cho nó với biến PERSON và cuối cùng in nó trên biến STDOUT.

#!/bin/sh

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:

echo "What is your name?"
read PERSON
echo "Hello, $PERSON"

Dưới đây là chạy mẫu của script trên:

$./test.sh
What is your name?
Zara Ali
Hello, Zara Ali
$