Shell là gì

Shell (vỏ sò)
Core và Shell là khái niệm mượn trong ngành xây dựng. Khi xây 1 toà nhà, các kỹ sư + công nhân sẽ lắp đèn, thảm, … thế nhưng đến khi cho thuê, “bố khách hàng” lại không thích vì đèn nhìn không sang, thảm thì như chỗ ngủ cho chó … Nói chung, toàn mấy ông khách khó chiều. Giải pháp là gì? Tao làm những cái cơ bản như móc treo đèn (+ dây diện), ống thoát nhà xí, chỗ để vòi nước … gọi là phần core (phần lõi), còn bố thích gì thì tự bố đi mua, bố lắp vào đó cho con nhờ, gọi là phần shell (phần vỏ).

Cũng như vậy, hệ điều hành cung cấp cho chúng ta các service (gọi là phần core), còn người dùng chúng ta thích gọi service ra thế nào thì tuỳ. Ví dụ, tôi muốn move file, bạn có thể dùng CLI shell, lệnh mv, hoặc có thể dùng GUI shell (file manager). Shell chính là một giao diện người dùng, giúp người dùng thao tác với OS (giống như các app muốn giao tiếp với OS thì cũng phải làm in hệt vậy. Ví dụ, OS sẽ cung cấp các API socket, các app sẽ gọi ra nếu muốn tương tác truyền file)

CLI Shell: ciao tiếp bằng text command (command line interface)
GUI Shell: ciao tiếp bằng đồ hoạ. Thường thì shell đồ hoạ sẽ tổ chức dạng như một bàn làm việc, với các tờ giấy, hồ sơ trên bàn (giống kiểu công chức bàn giấy)

Bash (Bourne Again Shell)
Một nhu cầu nảy sinh khi giao tiếp với OS là “tao thích làm nhiều task” chứ không thích ngồi gõ từng lệnh một mỏi tay lắm. Ngoài ra, các shell (app) cũng cần “thông” nhau, ví dụ như sau khi copy * sang thư mục kia, mày save toàn bộ tên file vào 1 text để sau này tao đối soát. Thế là Bourne Shell ra đời (nó là command interpreter, và thường được gọi là sh)

Bourne Shell support chạy interactive và non-interactive (có tương tác với người dùng), chạy async lẫn sync (chạy tuần tự hoặc không), hỗ trợ flow control, … Tuy nhiên, do khai báo biến, điều khiển flow khó nên một số dev đã cải tiến nó như csh (CShell), ksh (KornShell), ash (AlmShell) cho dễ dùng hơn.

Bash ra đời để hồi sinh cho Bourne Shell. Cũng giống các Unix shell #, Bash hỗ trợ wild card (*), pineline, … và có thể đọc command từ text file gọi là các script. Bash hơn các shell # là nó thiết kế hướng mở, support POSIX command nên extension nhiều vô biên và miễn phí nên được dùng trên hầu hết các OS Unix like hiện nay như Darwin (MAC), Redhat, …

Trên các hệ thống thì /bin/sh sẽ được symbolic link tới bash (có một số hệ thống như Ubuntu, Debian thì link tới dash (Debian AllShell), một dạng shell rút gọn, nhỏ cho thao tác non-interactive nhanh hơn)

Ngoài Bash, có RC (another C shell), syntax giống C nên viết dễ dàng hơn Bash rất nhiều lần.

Nói chung, lập trình bash là một lập trình vất vả và tốn time ^^

A single golf clap? Or a long standing ovation?

By clapping more or less, you can signal to us which stories really stand out.