Tài liệu Cơ bản về Linux Shell Script pdf

15 1.2K 24
Tài liệu Cơ bản về Linux Shell Script pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Cơ Shell A Giới thiệu chung Giới thiƯu vỊ shell Khi chóng ta mn thùc hiƯn mét lệnh hệ điều hành Unix cần phải lệnh để Unix hiểu đợc muốn làm Việc lệnh đợc thực qua shell Nh− vËy chóng ta cã thĨ hiĨu mét cách đơn giản shell giao diện để giao tiếp ngời sử dụng Unix Shell nhận lệnh từ ngời sử dụng sau dịch chuyển đến hệ thống hoạt động cần thực để đáp ứng yêu cầu Hiện có số loại shell hệ thống Unix, số trờng hợp hệ thống có nhiỊu shell cïng tån t¹i Mét sè lo¹i phỉ biÕn ®ang tån t¹i nh−: Bourne shell, Korn shell, C shell, Mỗi loại có khác nhng tất cung cấp đầy đủ công cụ để thiết lập môi trờng giao tiếp ngời sử dụng Unix Mơc ®Ých cđa shell Shell cã mơc ®Ých nh sau: - Tơng tác (interactive use) - Đặt biến môi trờng ngời sử dụng - Lập trình Tơng tác Trờng hợp đợc coi đơn giản sử dụng shell, shell đợi ngời sử dụng gõ lệnh 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 ngời sử dụng Unix shell xác định biến để điều khiển môi trờng ngời sử dụng phiên sử dụng Việc đặt biến xác định với hệ thống tham số nh th mục đợc sử dụng làm th mục chính, nơi đặt mail, th mục đợc sử dụng mặc định bạn gọi ®Õn c¸c lƯnh Unix, Mét sè biÕn hƯ thèng đợc đặt tệp khởi động (start-up file) đợc đọc bạn login (đăng nhập) Trong tệp khởi động bạn đặt lệnh Unix, nhng ý lệnh đợc thực bạn login Lập trình Shell cung cấp tập hợp lệnh đặc biệt mà từ tạo nên chơng trình, đợc gọi shell script Trong thực tế hầu hết lệnh nµy cã thĨ sư dơng cđa sỉ lƯnh cđa Unix ngợc lại, lệnh Unix có thĨ viÕt shell script Shell script rÊt tiƯn lỵi việc gộp nhiều lệnh độc lập vào thực nhiều lần Ngoài lệnh đơn giản hệ thống Unix, shell đợc bổ sung thêm cấu trúc phức tạp nh điều khiển rẽ nhánh (if/case), vòng lặp (for/while) VietHung soft group - viethung_group@email.com Một tệp chơng trình shell không quan trọng đến tên đuôi, không cần dịch nh môi trờng phát triển Việc soạn thảo tệp shell sử dụng công cụ soạn thảo nào, cần ghi tệp với dạng text, sau đổi thành dạng tệp chạy đợc Xem ví dụ phần sau để hiểu thêm chi tiết Shell gắn liền với hệ điều hành Unix, nhng để hiểu học shell không thiết bạn cần hiểu sâu hệ thống nh lệnh Unix Tuy nhiên thông qua ví dụ nêu bạn hiểu thêm cách sư dơng lƯnh vµ biÕn hƯ thèng Chó ý: Chóng nhắc đến hệ điều hành Unix giới thiƯu cịng nh− h−íng dÉn sư dơng, nh−ng thùc tÕ Linux hệ điều hành kế thừa Unix Linux có shell tơng tự bạn sử dụng giới thiệu shell với hệ thống Linux Những loại shell thời Hiện có nhiều loại shell đợc sử dụng hệ thống Unix, nhng đề cập đến loại phổ biến, là: - Bourne shell, đợc coi shell chuẩn, cô đọng loại đơn giản - Korn shell, cao cấp Bourne shell cho phép soạn dòng lệnh - C shell, sử dụng cú pháp ngôn ngữ lập trình C có thêm nhiều chức tiện lợi Thông thờng hệ thống có loại shell thông thờng Bourne shell đợc sử dụng để viết shell script, sử dụng loại khác cho việc tơng tác Tệp /etc/passwd xác định loại shell đợc sử dụng mặc định hệ thống cho phiên làm việc bạn Trong phần cuối dòng chứa tên bạn, bạn tìm thấy thông tin loại shell đợc sử dụng Mỗi bạn login, hệ thống đọc tệp để lấy thông tin khởi tạo cho shell Thông tin gồm dạng sau: /bin/sh /bin/jsh /bin/ksh /bin/csh Bourne shell Bourne shell, có thêm phần điều khiển tác vụ (job control) Korn shell C shell B¹n cã thĨ thay đổi shell mặc định sang loại khác cách sư dơng lƯnh: VÝ dơ chun tõ Bourne shell sang C shell: exec csh đổi shell b»ng lƯnh: chsh [] CÊu tróc lƯnh chsh nh− sau: chsh [-s ] [ -l ] [] chsh -l liệt kê loại shell có (thông tin chøa tƯp /ect/shells) Trong phÇn tiÕp theo, chóng giới thiệu Bourne shell, loại tiêu chuẩn, đơn giản phổ dụng hÖ thèng Unix VietHung soft group - viethung_group@email.com B Bourne shell In dòng chữ hình Ví dụ 1: Bạn tạo tệp với tên vidu1, sau gõ vào dòng sau: #!/bin/sh #vi du dau tien echo “Vi du dau tien voi shell.” B¹n sử dụng vi, emacs, để soạn thảo tệp Sau dùng lệnh chmod để chuyển tệp vidu1 thành tệp chạy đợc, lệnh nh sau: chmod +x thidu1 Để chạy thử bạn việc gõ: vidu1 Việc tạo dùng chmod cần thực tệp sau tạo cần chuyển thành tệp chạy đợc, không nhắc lại sau Nhng đối tệp đ đợc chuyển mod lần không cần làm lại thay đổi nội dung hay đổi tên Giải thích: - Dòng dòng đặc biệt, dùng để xác định loại shell đợc sử dụng gọi chơng trình thông dịch shell tơng ứng - Dòng thứ hai bắt đầu dấu # để dòng thích - Lệnh echo dùng để in 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, trỏ không bị ngắt xuống dòng sau in xâu ký tự Ngoài ra, bên xâu xâu ký tự bạn sử dụng số chức khác nh: \b lùi lại ký tự (backspace) \c không xuông dòng (nh -n) \n xuống dßng \t in ký tù tab \\ in ký tù \ \0n in ký tù cã sè n (số thập phân) bảng m ASCII Các bạn in ký tự đặc biệt cách đặt sau ký tự \, ví dụ: \ để in ký tự nháy kép () hình Ví dô: echo “\”Thong bao co loi! \”, \c \007” 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 echo VietHung soft group - viethung_group@email.com echo “Danh sach cac thu muc va tep:” ls –l echo echo “Vi tri hien thoi: ”`pwd` Trong ®ã lƯnh ls -l lệnh hệ thống đợc thực mà không cần gõ từ dấu nhắc Ngoài tất lệnh tham số khác hệ thống đợc thực cách tơng tự, ví dô nh−: cd, cp, mkdir, chmod, cat, BiÕn tham số hệ thống Cũng nh ngôn ngữ lập trình, shell sử dụng biến nhng không cần khai báo định nghĩa kiểu Các tham số môi trờng hệ thống sử dụng trực tiếp tên Tên tham số thờng tên, ký tự, số hay c¸c ký hiƯu *, @, #, ?, -, $, !\^ VÝ dơ 3: VÝ dơ vỊ dư sơng tham sè hÖ thèng #!/bin/sh #Vi du 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 thùc hiƯn lƯnh: vidu3 vi du Giải thích: - Trong đó, $0 biến chứa tên tệp vừa chạy $n, n=1, tham số dòng lệnh đợc đa chạy $$ số tệp vừa chạy (ID process) $# số tham số dòng lệnh đ đơc đa vào $@ liệt kê tất tham số dòng lệnh @- cờ process Tơng tự nh ngôn ngữ lập trình khác, shell script cung cấp phép gán lấy giá trị biến Ví dụ có biến với tên var, việc gán lấy giá trị đợc hiểu nh sau: var = giá trị số, xâu ký tự hay từ biến khác $var dùng để lấy gi¸ cđa biÕn var VietHung soft group - viethung_group@email.com Lệnh vào Lệnh in echo nh đ đợc giới thiệu ví dụ trớc, lệnh read đợc dùng để đọc vào từ bàn phím Ví dụ 4: Ví dụ lệnh đọc vào in liÖu #!/bin/sh #Vi du 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ả giá trị mà lu trữ Lệnh read nhận nhiỊu biÕn cïng mét lóc vµ cã cÊu tróc nh− sau: read [biÕn 2] [biÕn 3] VÝ dụ: read ten dienthoai diachi Khi bạn gõ vào: Hung 0123456 334 Nguyen Trai Bạn dùng lệnh sau để in thử biến hình: echo Ten : $ten” echo “Dien thoai : “ $dienthoai” echo “Dia chi : $diachi Trên hình in ra: Ten : Hung Dien thoai: 0123456 Dia chi: 334 Nguyen Trai Nh− hiểu nh sau: Các biến đợc nhận giá trị lần lợt dấu cách, biến cuối đợc nhận toàn phần lại Đối với biến cuối cùng, không liệu nhận giá trị rỗng (null) Phân biệt dấu huyền ( ` ), nháy đơn ( ' ) nh¸y kÐp ( " ) Trong shell cã ba dÊu `, , đợc dùng lệnh in hình hay lệnh gán, nhng ý nghĩa phơng thức thực dấu khác 5.1 DÊu ( ` ) VÝ dô mét tƯp shell cã nh÷ng lƯnh sau: currentdir = `pwd` VietHung soft group - viethung_group@email.com linecount = `wc –l $filename` LÖnh thứ đợc thực gán đờng dẫn thời vào biến currentdir, lệnh thứ hai đợc thực đếm số dòng tệp có tên $filename gán vào biến linecount Nh bạn hiểu cách đơn giản viết hai dấu ` ` đợc coi lệnh hệ thống đợc thực hiện, tham số sau lệnh hệ thống đợc tự động gán phần 5.2 Dấu ( ' ) ( " ) Kh¸c víi dÊu hun ( ` ), thông tin hai dấu nháy (nháy đơn nháy kép) đợc coi thông tin đợc sử dụng lệnh echo đợc in hình hay đợc gán vào biến dạng xâu Nh vậy, viết lệnh hệ thống hai dấu nháy mà để xâu ký tự hay biến Chúng ta xem xét dòng ví dụ sau: myname = "Viet Hung" echo "$myname" echo '$myname' # g¸n giá trị cho biến # kết hình: Viet Hung # kết hình: $myname Bạn dễ thấy khác biệt hai dấu nháy đơn nháy kép qua dòng lệnh trên, nháy kép (), in đợc thực với giá trị biến sau dấu $ Đối với dấu nháy đơn () in y nguyên nh dòng văn Thông thờng dấu nháy đơn đợc sử dụng nhng lại tiện lợi muốn in y nguyên dòng văn bản, đặc biệt có ký tự đặc biệt nh $, \ Các cấu trúc phức tạp Nh đ giới thiệu, lệnh đơn giản nh đọc, in hình thực lệnh hệ thống, shell hỗ trợ việc sử dụng lệnh phức tạp nh if-then-else, for/while Phần dới giới thiệu đến cấu trúc 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 in done Qua ví dụ dới bạn hiểu rõ cấu trúc vòng lặp for Ví dụ 5: Ví dụ vòng lặp for #!/bin/sh #Vi du VietHung soft group - viethung_group@email.com word= "abcde" # dem = # for letter in $word # count=`expr $count + 1` echo "Letter $count is [$letter]" done khởi tạo xâu khởi tạo biến count vòng lặp với biến letter # lệnh bắt đầu vòng lặp # tăng biến count lên # in biÕn letter # lƯnh kÕt thóc vòng lặp Có thể giải thích nh sau: với letter word thực lệnh nằm dodone, ví dụ bao gồm tăng biến count in biến letter hình Chú ý: Trong ví dụ 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 gán vào biến count 6.2 Cấu trúc vòng lặp: while Cấu trúc vòng lặp while đợc thể nh sau: while [ ] done Ví dụ 6: Ví dụ vòng lặp while #!/bin/sh #Vi du word= "abcde" # dem = # while [ $count –lt ] # count=`expr $count + 1` echo "Letter $count is [$letter]" done khởi tạo xâu khởi tạo biến count vòng lặp với biến letter # lệnh bắt đầu vòng lặp # tăng biến count lên # in biến letter # lệnh kết thúc vòng lặp Các bạn thấy cấu trúc hai vòng lặp gần hoàn toàn giống nhau, khác dòng for/while Trong ví dụ trên, $count -lt đợc coi điều kiện vòng lặp Phép so sánh -lt phép so sánh nhỏ (less-than) lệnh test Unix/Linux Lệnh kiểm tra điều kiện trả giá (1) trị sai (0) để thực tiếp hay thoát khỏi vòng lặp Ngoài phép so sánh -lt" có -gt-lớn hơn, -eq-bằng, -ne-không Trong phần phụ lục có liệt kê lại lệnh, tham số phép toán shell, bạn đọc để biết thêm phép toán khác VietHung soft group - viethung_group@email.com Chú ý: Trong phần điều kiện vòng lặp while nh điều kiện khác, sau dấu [ 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 hiểu vòng lặp until tơng tù nh− while CÊu tróc cđa vong lỈp until nh− sau: until [ ] done 6.4 CÊu tróc rÏ nh¸nh: if - else CÊu tróc rẽ nhánh đợc hiểu qua từ khóa cã cÊu tróc nh− sau: if [ ] then [ elif then ] [ else ] fi Đối với cấu trúc có hai dạng, đơn giản phức tạp Sau giới thiệu hai ví dụ để bạn hiĨu c¸ch sư dơng VÝ dơ 7: CÊu tróc if đơn giản #!/bin/sh #Vi du 7a echo Nhap so a: ” read a echo “Nhap so b: ” read b if [ $a –lt $b ] then echo “so a nho hon so b.” elif [ $a –eq $b ] then echo “so a bang so b.” else echo “so a lon hon so b.” fi #kiÓm tra a nhá b không #kiểm tra a b #trờng hợp lại #kết thúc Ví dụ thực số, dới ví dụ đờng dẫn tệp đĩa VietHung soft group - viethung_group@email.com #!/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 cê kiĨm tra sù tån t¹i cđa mét tƯp, d cờ để kiểm tra tồn th mơc VÝ dơ 8: CÊu tróc if phøc t¹p Trong ví dụ bạn hiểu cách 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 ] then echo “so c lµ so lon nhat.” fi #xem c cã lín nhÊt kh«ng Trong vÝ dụ trên, && (và) dấu kiểm tra kép để kết hợp hai điều kiện Ta hiểu điều kiƯn sau if nh− sau: “NÕu a nhá h¬n c b nhỏ c Ngoài cã || ( hc ) #!/bin/sh #Vi du 8b if [ -f $dir/$file ] || [ -f $dir/$newfile ] then echo "Hoac tep [$file] " echo "hoac tep moi [$newfile] da ton tai" VietHung soft group - viethung_group@email.com elif [ -d $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 hiểu qua tập từ khóa sau: case in biÕn-1) biÕn-2) biÕn-3) *) exit esac #còn lại Ví dụ 9: Ví dụ case tham số đầu vào tệp chơng trình #!/bin/sh #Vi du size=0 page=200 option = “” while [ "$1" != "" ] case $1 in -?) echo “Su dung cac tham so –l,-p,-s.” exit;; -l) line = 50 page = 500 option = “$option page[$page] line[$line] “ shift;; -p) line = 40 VietHung soft group - viethung_group@email.com option = “$option page[$page] line[$line] “ shift;; -s) size = 10; shift 2;; *) echo "Tham so vao khong co [p, l, s]"; exit;; esac if [ $size = ] then size=`echo "$page / $lines" | bc` else lines=`echo "$page / $size" | bc` fi done echo “$option $lines $size” Trong vÝ dô đ đa cách sử dụng cấu trúc case, đồng thời giới thiệu cách nhận xử lý tham số đầu vào chạy tệp shell script Lệnh shift lệnh dịch tham số đầu vào sang trái để thực tham số Đặc biệt 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 sử dụng hàm con, hỗ trợ hữu ích nhng cần phải khai báo phần khởi động ngời sử dơng, thĨ lµ tƯp profile Mét vÝ dơ đơn giản: uppercase() { echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' \ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' } Hàm dùng để sử dụng lệnh tr hệ thống nhằm chuyển chữ thờng thành chữ hoa Việc gọi hàm cần viết: uppercase thu chuyen doi” hc smallword = “thu chuyen doi” uppercase “$smallword” Nhng nh đ nói khác biệt kết dấu nháy kép, kết hai dòng lÖnh sau: largeword = `uppercase “$smallword”` VietHung soft group - viethung_group@email.com largeword = `uppercase $smallword` khác Dòng thứ trả ra: THU CHUYEN DOI, dong thứ hai se tra ra: THU Làm việc với tệp Trong ví dụ 7b đ giới thiệu cách kiểm tra tồn tệp hay môt đờng dẫn nên phần không đề cập đến mà đa cách đọc ghi mét tÖp #!/bin/sh #Vi du dem so tep thu muc count=1 for file in `ls -1 *` 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 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 vài kỹ thuật nh đọc phần cuối tệp đầu vào (với lệnh tail)sau lại lấy dòng đầu đoạn (với lệnh head -1) để lấy đợc dòng từ xuống tệp đầu vào Hai tham sè -c1-8 cđa lƯnh wc dïng ®Ĩ bá phần tên tệp kết liệt kê số dòng tệp Ngoài ra, bạn dùng lệnh: Cat >> >=

Ngày đăng: 15/12/2013, 20:15

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan