sh là gì

 sh  (hay Ngôn ngữ thông dịch lệnh) là một ngôn ngữ lập trình được mô tả bởi chuẩn POSIX. Nó có nhiều phiên bản cài đặt (ksh88, dash, …).  bash  có thể được xem là 1 cài đặt của  sh .

Vì sh là một đặc tả, không phải là một cài đặt, do đó  /bin/sh  là một symlink (liên kết tượng trưng) tới một chương trình cài đặt cụ thể trên các hệ thống POSIX.

bash là gì

 bash  có thể là một thể hiển cài đặt đầu tiên của sh (mặc dù nó có trước chuẩn POSIX), nhưng qua thời gian thì nó đã có nhiều phần mở rộng. Nhiều phần thay đổi mở rộng có thể xử lý không hợp lệ với chuẩn POSIX, do bản thân bash không là một shell POSIX hợp lệ. Thay vào đó, nó là một thổ ngữ của ngôn ngữ shell POSIX.

bash có thể chuyển đổi sang mode –posix, điều này làm cho bash hợp lệ và tuân thủ chuẩn POSIX.

sh == bash ?

Một thời gian dài,  /bin/sh  trỏ đến  /bin/bash  trên hầu hết các hệ thống GNU/Linux. Kết quả là, nó đã gần như trở nên an toàn để bỏ đi sự khác biệt giữa chúng. Nhưng điều đó đã thay đổi gần đây.

Một vài các ví dụ phổ biến của các hệ thống  /bin/sh  không trỏ đến  /bin/bash 

  1. Các hệ thống hiện đại Debian/Ubuntu, mặc định  sh  trỏ đến  dash 
  2. BusyBox, thường chạy trong thời gian khởi động hệ thống Linux và là một phần của initramfs: Sử dụng  ash 
  3. BSDs: OpenBSD sử dụng  pdksh , một thế hệ sau của Korn shell.

Shebang line

Cuối cùng là để bạn quyết định cái nào sẽ được sử dụng, bằng việc chú thích số hiệu dòng lệnh Shebang:

E.g.

#!/bin/sh

Nó sẽ sử dụng chương trình  sh  mặc định của hệ thống đang trỏ tới.

Bạn có thể kiểm tra hệ thống đang sử dụng shell nào bằng lệnh:

root@ssdc:~# file /bin/sh
/bin/sh: symbolic link to `dash'

Hoặc, bạn cần khai báo shell cụ thể sử dụng trong chương trình, khai báo sau đây sử dụng chương trình bash:

#!/bin/bash

Hoặc sử dụng dash, với khai báo sau:

#!/bin/dash

Nên sử dụng chương trình nào.

Trong các scripts cá nhân, tôi thường sử dụng sh vì các lý do sau:

  • Nó là một chuẩn
  • Đơn giản và dễ học
  • Nó dễ dàng di động qua các hệ thống POSIX – ngay cả khi chúng không cài đặt bash, nhưng trên hệ thống vẫn có chương trình sh được cài đặt.

Có nhiều lợi thể khi sử dụng bash. Các tính năng rất thuận tiện cho việc lập trình và giống với các chương trình lập trình hiện đại. Còn sh là một ngôn ngữ lập trình gọn nhẹ.

Tham khảo: http://stackoverflow.com/a/5725402/1896897

About The Author