Hướng dẫn căn bản về Shell

20
0

shellscripting 1542594064464172154102

A. GIỚI THIỆU CHUNG VỀ SHELL

1. GIỚI THIỆU VỀ SHELL

Khi chúng ta muốn thực hiện một lệnh nào đó trong hệ điều hành Unix chúng ta cần phải ra lệnh để Unix hiểu được chúng ta muốn làm gì. Việc ra lệnh này được thực hiện qua shell. Như vậy chúng ta có thể hiểu một cách đơn giản shell là giao diện để giao tiếp giữa người sử dụng với Unix. Shell nhận lệnh từ người sử dụng sau đó dịch và chuyển đến hệ thống những hoạt động cần thực hiện để đáp ứng yêu cầu.

Hiện nay có một số loại shell trong các hệ thống Unix, trong một số trường hợp trong hệ thống nào đó có thể có một hoặc nhiều shell cùng tồn tại. Một số loại phổ biến như: Bourne shell, Korn shell, C shell,… Mỗi lại có sự khác nhau nhưng tất cả đều cung cấp đầy đủ công cụ thiết lập môi trường giao tiếp giữ người sử dụng và Unix.

2. MỤC ĐÍCH CỦA SHELL

Shell có 3 mục đích chính như sau

  1. Tương tác (interactive use)
  2. Đặt biến môi trường đối với mỗi người sử dụng
  3. Lập trình

Tương tác

Trường hợp được coi là đơn giản khi sử dụng shell, shell đợi người sử dụng gõ các lệnh tại dấu nhắc, sau đó gửi tới hệ thống yêu cầu từ lệnh nhận được.

Đặt biến môi trường đối với mỗi người sử dụng

Unix shell xác định các biến để điều khiển môi trường của người sử dụng đối với mỗi phiên sử dụng. Việc đặt các biến này sẽ xác định với hệ thống những tham số hnuw thư mục nào sẽ được sử dụng làm thư mục chính, mơi đặt mail, những thư mục nào được sử dụng mặc định khi bạn gọi đến các lệnh Unix,… Một số biến hệ thống có thể được đặt trong tệp khởi động (start-up file) và được đọc khi bạn login(đăng nhập). Tỏng tệp khởi động bạn có thể đặt các lệnh của Unix, nhưng chú ý là những lệnh này sẽ được thực hiện mỗi khi bạn login.

Lập trình

Shell cung cấp tập hợp các lệnh đặc biệt mà từ đó có thể tạo nên những chương trình, khi đó được gói là shell script. Trong thực tế hầu hết các lệnh này có thể sử dụng trong của số lệnh của Unix và ngược lại, các lệnh của Unix đều cso thể viết trong shell script. Shell script rất tiện lợi trong việc gộp nhiều lệnh độc lập vào một và thực hiện nhiều lần.

Ngoài ra những lệnh đơn giản của hệ thống Unix, shell còn được bổ sung thêm các cấu trúc phức tạp như điều khiển rẽ nhánh (if/case), vòng lặp (for/while)

Một tệp chương trình của shell không quan trọng đén tên và đuôi, không cần dịch cũng như không có môi trường phát triển. Việc soạn thảo một tệp shell có thể sử dụng bất kỳ một công cụ soạn thảo nào, chỉ cần tệp đó với dạng text, sau đó nôi thành tệp có thể chạy được. Xem ví dụ trong phần sau để hiểu thêm chi tiết.

Shell luôn gắn liền với hệ điều hành Unix, nhưng để hiểu và học shell không nhất thiết bạn cần hiểu sau về hệ thống cũng như các lệnh của Unix. Tuy nhiên thông qua những ví dụ tôi nêu ở đây các bạn có thể hiểu thêm cách sử dụng lệnh và biến hệ tohongs.

Chú ý: Tôi chỉ nhắc đến hệ điều hành Unix khi giới thiệu cũng như hướng dẫn sửa dụng, nhưng thực tế hiện nay Linux là một hệ điều hành kế thừa của Unix. Linux cũng có những shell tương tự và các bạn có thể sử dụng những giới thiệu về shell ở đây để áp dụng với hệ thống Linux.

3. NHỮNG LOẠI SHELL HIỆN THỜI

Hiện này cso khá nhiều loại shell được sử dụng trong các hệ thống Unix, nhưng ở đây tôi chỉ đề cập đến 3 loại cơ bản và phổ biến đó là:

  1. Bourne shell, được coi là shell chuẩn, cô đọng và là lại đơn giản nhất.
  2. Korn shell, cao cấp hơn Bourne shell và cho phép soạn dòng lệnh.
  3. C shell, sử dụng cú pháp của ngôn ngữ lập trình C và có thêm nhiều chưucs năng tiện lời.

Thông thường các hệ thống có ít nhất là một lại shell và thông thường bourne shell đước ử dụng để viết shell script, còn sử dụng một lại khác cho việc tương tác.

Tệp /ect/passwd sẽ xác định được loại shell nào sẽ được sử dụng mặc dịnh trong hệ thống cho mỗi phiên làm việc của bạn. Tỏng phần cuối của dòng chứa tên bạn, bạn có thể tìm thấy thông tin về loại shell nào được sử dụng. Mỗi khi bạn login, hệ thống sẽ đọc tệp này để lấy thông tin khởi tạo cho shell.

Thông tin có thể gồm một trong những dạng sau.

/bin/sh: Bourne shell
/bin/jsh: Bourne shell, có thêm phần điều khiển tác vụ (job control)
/bin/ksh: Korn shell
/bin/csh: C shell

Bạnc so thể thay đổi shell mặc định sang một loại khác bằng cách sử dụng lệnh:

Ví dụ chuyển từ Bourne shell sang C shell

exec csh

hoặc có thể đổi shell mới bằng lệnh

chsh [<tên shell>]

Cấu trúc lệnh chsh như sau:

chsh [-s <tên shell>] [-l ] [<tên người>]
chsh -l #liệt kê các loại shell hiện có (thông tin chứa trong tệp /etc/shells)

Trong phần tiếp theo, tôi sẽ giới thiệu về Bourne shell, loại tiêu chuẩn, đơn giản và phổ biến nhất hiện nay trong các hệ thống.

B. BOURNE SHELL

1. IN MỘT DÒNG CHỮ RA MÀN HÌNH

Ví dụ 1: Bạn tạo một tệp với tên vidu1, sau đó gõ vào những dòng sau:

bin/sh
#Vi du dau tien
echo "Vi du dau tien voi shell."

Bạn có thể sử dụng vi, vim, nano, emacs… để soạn thảo tệp trên. Sau đó dùng lệnh chmod để chuyển tệp vidu1 thành tệp có thể chạy được, lệnh đó như sau:

chmod +x vidu1

Để chạy thử bạn chỉ việc gõ: vidu1 <tenter>

Việc tạo và sử dụng chmod đều cần thực hiện đối với mỗi tệp sau khi tạ ra và cần chuyển thành tệp chạy được. Nhưng đối với tệp đã được chuyển mod một lần thì không cần làm lại khi thay đổi nội dung hay đổi tên.

Giải thích:

  • Dòng đầu tiên là dòng đặc biệt, dùng để xác định loại shell được sử dụng và gọi chương trình thông dịch shell tương ứng
  • Dòng thứ 2 bắt đầu bằng đâu # để chỉ một dòng chú thích
  • Lệnh echo dùng để in ra màn hình xâu ký tự hay các biến, echo có cấu trúc như sau:
echo [-n] [xâu ký tự]

Nếu có chức năng -n, con trỏ không bị ngắt xuống dòng sau khi in ra xâu ký tự.

Ngoài ra, bên trong xâu, xâu ký tự các bạn còn có thể sử dụng một số chức năng khác như:

  • b : lùi lại một ký từ (backspace)
  • c: : không xuống dòng (như -v)
  • n : xuống dòng
  • t : in ra ký tự tab
  • \ : in ra ký tự /
  • n : in ra ký tự cón số n (số thập phân) trong bảng mã ASCII

Các bạn có thể in ra những ký tự đặc biệt bằng cách đặt sau ký tự , ví dụ như: " để in ra ký tự nháy kép (“) ra màn hình

Ví dụ:

echo "" Thong bao co loi! ", c 07"

2. THỰC HIỆN CÁC LỆNH HỆ THỐNG

Ví dụ 2: Ví dụ thực hiện một lệnh của hệ thống.

#!/bin/sh
#vi du 2
echo
echo "Danh sach cac thu muc va tep:"
ls -l
echo
echo "Vi tri hien thoi: " 'pwd'

Trong đó lệnh ls -l là một lệnh của hệ thống được thực hiện mà không cần gõ từ dấu nhắc. Ngoài ra tất cả các lệnh và tham số khác của hệ thống đều có thể được thực hiện một cách tương tự, ví dụ như: cd, cp, mkdir, chmod, cat,…

3. BIẾN VÀ THAM SỐ HỆ THỐNG

Cũng như các ngôn ngữ lập trình , shell có thể sử dụng biến nhưng không cần khai báo và định nghĩa kiểu. Các tham số của môi trường và hệ thống có thể sử dụng trực tiếp bằng tên. Tên của các tham số thường là một các tên, một ký tự, số hay một trong các ký hiệu *,@,#,?,-,$,!^.

Ví dụ 3: Ví dụ về sử dụng tham số hệ thống

!/bin/sh
#Vi du 3
echo "Ten tep                       [$0]"
echo "Bien vao thu nhat             [$1]"
echo "Bien vao thu hai              [$2]"
echo "Chi so cua process            [$$]"
echo "So bien dau vao               [$#]"
echo "Tat ca cac bien dau vao       [$@]"
echo "Co cua process                [$-]"

Các bạn có thể hiểu thêm khi thực hiện lệnh : vidu3 vi du 3

Giải thích:

  • Trong đó, $0 là biến chứa tên của tệp và chạy.
  • $n, n=1,..9 là các tham số dòng lệnh được đưa vào khi chạy
  • $$ là chỉ số của tệp vừa chạy (ID process)
  • $# là số tham số dòng lệnh đã được đưa vào
  • $@ liệt kê tất cả các tham số dòng lệnh
  • @- cờ của process

Tương tự như các ngôn ngữ lập trình khác, shell script cung cấp các phép “gán” và “lấy” các giá trị của bến. Ví dụ có biến với tên var, việc gán và lấy giá trị được hiểu như sau:

var = <giá trị> giá trị ở đây có thể là một số, một xâu ký tự hay từ một biến khác
$var                   dùng để lấy giá của bến var

4. LỆNH VÀO RA

Để tin ra echo như đã được giới thiệu trong các ví dụ trước, lệnh read được dùng để độc vào từ bàn phím.

Ví dụ 4: Ví dụ về lệnh độc vào và in ra dữ liệu.

#!/bin/sh
#Vi du 4
echo "Ban ten gi:"
read  ten
echo "Chao ban $ten"

Giải thích:

  • read dùng để nhận giá trị từ bàn phím sau đó gán vào biến ten
  • $ten trả ra giá trị mà nó lưu trữ

Lệnh read còn có thể nhận biết biến cùng một lúc và có cấu trúc như sau

read <bien 1>[ bien 2] [bien 3]...

Ví dụ:

read ten dienthoai diachi

Khi bạn gõ vào Quan 0969030302 HCM

Bạn dùng các lệnh sau để in thửu các biến ra màn hình:

echo "Ten : $ten"
echo "Dien Thoai : $dienthoai"
echo "Dia chi : $diachi"

Trên màn hình sẽ in ra:

  • Ten: Quan
  • Dien thoai: 0969030302
  • Dia chi: HCM

Như vậy có thể hiểu như sau: Các biến được nhận giá trị lần lượt cho đến dấu cách, biến cuối cùng sẽ được nhận toàn bộ phần còn lại. Đối với biến cuối cùng, nếu không còn dữ liệu thì sẽ nhận giá trị rỗng (null)

5. PHÂN BIỆT DẤU HUYỀN (`), NHÁY ĐƠN (‘) VÀ NHÁY KÉP (“)

Trong shell có 3 dấu `,”,’ được dùng trong các lệnh in ra màn hình hay lệnh gán, nhưng ý nghĩa và phương thức thực hiện đối với những dầu này là khác nhau.

5.1 Dấu (`)

Ví dụ trong một tệp shell có những lệnh sau

currentdir = `pwd` 
linecount = `wc -l $filename` 

Lệnh thứ nhất sẽ được thực hiện và gnas đường dẫn hiện thời vào biến currentdir, lệnh 2 được thực hiện và đếm số dòng trong tệp có tên trong $filename rồi gán voà biến linecount.

Như vậy bạn có thể hiểu một cáchd dơn giản là những gì viết trong giữ hai dấu `` sẽ được coi là lệnh của hệ thống và được thực hiện, những tham số sau các lệnh hệ thống cũng được tự động gán trong phần này.

5.2 Dấu (‘) và (“)

khác với dấu huyền (), những thông tin giữa hai dấu nháy (nháy đơn hoặc nháy kép) được coi là thônh tin được sử dụng trong lệnh echo và sẽ được in ra màn hình hay được gán vào biến dạng xâu. Như vậy, không thể viết các lệnh hệ thống giữ hai dấu nháy mà chỉ để các xâu ký tự hay các biến. Chúng ta xem những dòng víd ụ sau:

myname = "DO TRUNG QUAN"                # gán  giá trị cho một biến
echo "$myname"                          # kết quả ra nàm mình : DO TRUNG QUÂN
echo '$myname'                                           # Kết quả ra màn hình: %myname 

Bạn có teher dễ thấy sự khác biệt của hai dấu nháy đơn và nháy kép qua những dòng lệnh trên, đối với nháy kép (“), khi in ra sẽ được thực hiện với giá trị của biến sau dấu $. Đối với dấu nháy đơn (‘) thì sẽ in ra y nguyên như trong dòng văn bản. Thông thường dấu nháy đơn ít được sử dụng nhưng lại rất tiện lợi khi muốn in y nguyên một dòng văn bản, đặc biết là khi có các ký tự đặc biệt như $, .

6. CÁC CẤU TRÚC PHỨC TẠP

Như đã giới thiệu, ngoài những lệnh đơn giản như đọc, in ra màn hình và thực hiện các lệnh hệ thống, shell còn hỗ trợ việc sử dụng các lệnh phức tạp hơn như if-then-else, for/white.

Phân dưới đây tôi sẽ giới thiệu đến những cấu trúc này.

6.1 Cấu trúc vòng lặp: FOR

Cấu trúc vòng lặp for được xây dựng như sau

for <biến ký tự> in <xâu>
do
     <các lệnh cần thực hiện>
done

Qua ví dụ sau đây bạn có teher hiểu rõ hơn cấu trúc vòng lặp for

Ví dụ 5: VÍ dụ về vòng gặp for

#!/bin/sh
#vi du 5
word= "abcde"                               # khi tạo một xâu
dem = 0                                     #khởi tạo biến count            
for letter in $word                         #vòng gặp với biến letter
do                                          #lệnh bắt đầu vòng lặp
     count =`expr $count + 1`               #Tăng biến count lên 1
     echo "Letter $count is [$letter]"      # in ra biến letter
done                                        # lệnh kết thúc vòng lặp

Có thể giải thích như sau: với mỗi letter trong word thì thực hiện những lệnh nằm trong do-done, trong ví dụ trên bao gồm tăng biến count và in biến letter ra màn hình.

Chú ý: Trong ví dụ trên có dùng lệnh expr để gọi lệnh thực hiện tính toán của hệ thống tính phép cộng trước khi gán vào biến count

6.2 Cấu trúc vòng gặp: while

Cấu trúc vòng gặp while được thể hiện như sau:

while [ <điều kiện>]
do
     <các lệnh>
done

Ví dụ 6: Ví dụ về vòng lặp while

#!/bin/sh
#vi du 6
word= "abcde"                                #khởi tạo xâu
dem = 0                                      #khởi tạo biến count
while [ $count -lt 5]                        #vòng lặp với biênns letter
do                                           #lệnh bắt đầu vòng lặp
     count =`expr $count + 1`                #tăng biến count lên 1
     echo "Letter $count is [$letter]"       #in ra biến letter
done                                         #lệnh kết thúc vòng lặp

Các bạn có thể thấy ngay cấu trúc hài vòng lặp trên gần hoàn toàn giống nhau, chỉ khác dòng for/while. Trong ví dụ trên, $count -lt được coi là điều kiện của vòng lặp. Phép so sánh "-lt" là phép so sánh “nhỏ hơn hoặc bằng” (less-than) trong lệnh test của Unix/Linux. Lệnh kiểm tra điều kiện trên sẽ trả ra giá đúng (1) hoặc sai (0) để thực hiện tiếp hay thoát khởi vòng lặp.

Ngoài phép so sánh “-lt” còn có -gt-lớn hơn, –eq-bằng, -ne-không bằng. Trong phần phụ lục tôi có liệt kê lại các lệnh, tham số và phép toán của shell, các bạn có thể dọcd dể biết thêm các phép toán.

Chú ý: Trong phần điều kiện của vòng gặp while cũng như trong những điều kiện khác, sau dấu “[” và trước dấu “]” bắt buộc phải có dấu trắng (dấu cách)

6.3 Cấu trúc vòng lặp: until

Chúng ta có thể hiểu vòng lặp until tuong tự như while. Cấu trúc của vòng lặp until như sau:

until [ <điều kiện> ]
do
     <các lệnh>
done

6.4 Cấu trúc rẽ nhánh: if -else

Cấu trúc rẽ nhánh có thể được hiểu qua các từ khoá có cấu trúc như sau:

if [ <điều kiện> ]
then
<lệnh>
[ elif <lệnh> then <lệnh> ] ...
[ else <lệnh> ]
fi

Đối với cácu trúc này có hai dạng, đơn giản và phức tạp. Sau đây tôi sẽ giới thiệu hai ví dụ để bạn hiểu cách sử dụng hơn.

Ví dụ 7: Cấu trúc if đơn giản

#!/bin/sh
#Vi du 7a
echo "Nhap sa a:"
read a
echo "Nhap so b:"
read b
if [ $a -lt $b]                         # kiểm tra a nhỏ hơn b
     then
          echo "so a nho hon so b."
elif [ $a -eq $b ]                      # kiểm tra nếu a bằng b
 then
     echo "so a bang so b."
else                                    # trường hợp còn lại
     echo "so a lon hon so b."
fi                                      # kết thúc

Ví dụ trên thực hiện đối với các số, dưới đây là ví dụ đối với đường dẫn và tệp trên đĩa

#!/bin/sh
#Vi du 7b
if [ -f $dirname/$filename ]
then
     echo "Tep [ $filename ] da ton tai."
elif [ -d $dirname ]
 then
     echo "Duong dan [ $dirname ] da ton tai."
else
     echo "Ca duong dan [ $dirname ] va tep [$filename] khong ton tai."
fi

Trong ví dụ trên, f là cờ kiểm tra sự tồn tại của một tệp, d là cờ để kiểm tra sự tồn tại của một thư mục.

Ví dụ 8: Cấu trúc if phức tạp. Trong ví dụ này bán ẽ hiểu các sự dụng điều kiện kép; && (và), || (hoặc)

#!/bin/sh
#Vi du 8a
echo "Nhap so a:"
read a 
echo "Nhap so b:"
read b 
echo "Nhap so c:"
read c 

if [ $a -lt $c ] && [ $b -lt $c ]  # xem c có lớn nhất không
     then
          echo "so c là lớn nhất."
fi

Trong ví dụ trên, && (và) là đấu kiểm tra kép để kết hợp hai điều kiện. Ta có thể hiểu điều kiện sau if như sau: “Nếu a nhỏ hơn c và b nhỏ hơn c thì…” Ngoài ra còn có || (…hoặc…).

#!/bin/sh
#Vi du 8b
if [ 0f $dir/$file] || [ -f $dir/$newfile ]
then
          echo "Hoac tep [ $file]"
          echo "hoac tep moi [ $newfile] da ton tai"
elif [ -f $dir ];
 then
     echo "Duong dan [ $dir] da ton tai"
else
     echo "Ca duong dan [ $dir], tep [ $file va tep moi $newfile] deu khong ton tai"
fi

6.5 Cấu trúc rẽ nhánh nhiều trường hợp: case

Cấu trúc case có thể được hiểu qua tập các từ khoá sau:

case <biến>
in 
     biến-1)
          <lệnh>
     biến-2)
          <lệnh>
     biến-3)
          <lệnh>
...
     *)        # còn lại
          exit
esac

Ví dụ 9: Ví dụ về case đối với tham số đầu vào của một tệp chương trình.

#!/bin/sh
#Vi du 9
size=0
page=200
option = ""
while [ "$1" ! = ""]
do
     case $1
     in
          -?) echo "Su dung cac tha so -l,-p,-s."
               exit;;
          -l) line = 50
               page = 500
               option = "$option page [ $page] line [ $line] "
               shift;;
          -p) line = 40 
               option = "$option page[ $page] line [ $line]"
               shift;;
          -s) size = 10;
               shift 2;;
          *) echo "Tham so vao khong co trong [ p, l, s]";
               exit;;
     esac
     if [ $size - 0]
     then
          size='echo "$page / $line" | bc'
     else
          line='echo "$page / $size" | bc'
     fi
done
echo "$option $line $size"

Trong ví dụ trên đã đưa ra cách sử dụng cấu trúc case, đồng thời giới thiệu cách nhận và xử lý tham số đầu voà khi chạy một tệp shell script. lệnh shift là lệnh dịch tham số đầu vào sang trái 1 để thựch iện các tham số tiếp theo. Đặc biệt trong đố còn chỉ cách gọi máy tính số với số cần tính được đưa vào trước.

6.6 Hàm

Shell hỗ trợ khai báo và sử dụng hàm con, đây là một hỗ trợ rất hữu ích nhưng cần phải khai báo một phần khởi động của người sử dụng, cụ thể là trong tệp .profile

Một ví dụ đơn giản:

uppercase()
{
     echo  $1 | tr 'qwertyuiopasdfghjklzxcvbnm'  'QWERTYUIOPASDFGHJKLZXCVBNM'

}

Hàm trên dùng để sử dụng lệnh tr của hệ thống nhằm chuyển các chữ thường thành chữ hoa. Việc gọi hàm trên chỉ cần viết:

uppercase "thu chuyen doi"

hoặc

smallword = "thu chuyen doi"
uppercase "$smallword"

Như đã nói về sự khác biệt của kết quả trọng dấu nháy kép, kết quả của haid òng lệnh sau:

largeword = 'uppercase "$smallword"'
largeword = 'uppercase $smallword'

là khác nhau. Dòng thứ nhất trả ra: “THƯ CHUYEN DOI”, còn dòng thứ haiu sẽ rtar ra “THU”

7. LÀM VIỆC VỚI CÁC TỆP

Trong ví dụ 7b tôi đã gới thiệu cách kiểm tra sự tồn tại của một tệp hay một đường dẫn, nên phần này sẽ không đề cập đến nữa mà chỉ đưa ra cách đọc và ghi một tệp.

#!/bin/sh
#Vi du den so tep trong thu muc
count=1
for file in `ls -1 *`
do
     echo "$count: $file" >> $mnu0
     count= `expr $count + 1`
done

#Vi du doc va ghi tu tep inputfile sang tep outputfile
filelength=`wc -l $inputfile | cut -c1-8`
filelength=`expr $filelength + 0`
while $filelength
do
    line=`tail -$filelength $inputfile | head -1`
    words=`s_count_args $line`
    echo "$line = $words words" >> $outputfile
    file_length=`expr $filelength - 1`
done

Trong ví dụ trên có sử dụng một vài kỹ thuật như độc phần cuối của tệp đâuv ào (với lệnh tail) sau đó lấy dòng đầu của đoạn (với lệnh head -1) đề lấy ra được từng dòng từ trên xuống cảu tệp đầu vào. Hai tham số -c1-8 của lệnh wc dùng để bỏ phần tên tệp trong kết quả liêkt kê số dòng trong tệp đó. Ngoà ra các bạn có thể dùng lệnh

cat >> <tên tệp> <<-EOA

để tạo ra một tệp trước với tên trong <tên tệp>

8. TÌM HIỂU LỆNH TEST

test là lệnh kiểm tra sự tồn tại của các tệp, thư mục và so sánh biến số. Cấu trúc của lệnh test như sau.

test <điều kiện>
     hoặc [<điều kiện>]

Có các tham số như sau:

Điều kiện với các tệp, thư mục:

  • -f <tên> : sự tồn tại của tệp thông thường.
  • -d <tên> : sự tồn tại của thư mục.
  • -c <tên>: sự tồn tại tệp dạng ký tự
  • -r <tên>: sự tồn tại và có thể đọc được.
  • -s <tên>: sự tồn tại và có thể ghi được.
  • -w <tên>: sự tồn tại và có thể ghi được
  • -x <tên>: sự tồn tại và có thể chạy được.

Điều kiệnk với các xâu ký tự

  • -n s1: xâu s1 có độ dài lớn hơn 0
  • -z ns1: xâu s1 có độ dài bằng 0
  • s1 = s2: hai xâu s1 và s2 giống nhau
  • s1 !=s2: hai xâu s1 và s2 không giống nhau
  • s1 < s2: xâu s1 đứng trước xâu s2 theo thứ tự của bảng mã ASCII
  • s1 > s2 xâu s1 đứng sau xâu s2 theo thứ tự của bảng mã ASCILL
  • string biến string không rỗng (not null)

Điều kiện với các số

  • n1 -eq n2: so sánh bằng.
  • n1 -ge ns2: so sánh lớn hơn hoặc bằng,
  • n1 -gt n2: so sánh lớn hơn
  • n1 -le n2: so sánh nhỏ hơn hoặc bằng.
  • n1 -lt n2: so sánh nhỏ hơn
  • n1 -ne n2: so sánh không bằng.

Ví dụ:

if test $# -gt 0    nếu có tham số
if [ -n "$1"]       nếu tham số khác trống
if [ $count -lt 5]  nếu giá trị của biến count nhỏ hơn 5

PHỤ LỤC

Danh sách phép toán, lệnh và tham số môi trường.

  • $0 : tên tệp đang được thực hiện
  • $1 : tham số thứ nhất
  • $2: Tham số thứ hai

……

  • $# số tham số
  • $@ liệt kê tất cả các tham số
  • $$ chỉ số của process
  • $- cờ (flag)
  • + phép cộng
  • – phép trừ
  • * phép nhận
  • / phép chia
  • % phép lấy phần dư
  • == so sánh bằng
  • != so sánh không bằng
  • < so sánh nhỏ hơn
  • > so sánh lớn hơn
  • >= so sánh lớn hơn hoặc bằng
  • <= so sánh nhỏ hơn hoặc bằng
  • || hoặc
  • && và
  • $USER tên người sử dụng hiện tại
  • echo in ra màn hình
  • read đọc từ bàn phím
  • $HOME/$home thư mục chính của người dùng hiện tại
  • $dir
  • $path

…………………………….

Đỗ Trung Quân
WRITTEN BY

Đỗ Trung Quân

Nguồn nội dung này đến từ Website DoTrungQuan.info

Trả lời