Linux - Linux shell script

Vai trò của Linux Shell

• Quá trình thông dịch lệnh Shell

• Khởi tạo biến Shell

• Biến môi trường Shell

• Viết Shell Script

pdf29 trang | Chia sẻ: Mr Hưng | Lượt xem: 978 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Linux - Linux shell script, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Linux Shell Script Âu Bửu Long – Lê Minh Triết Phiên bản 2014 Mục tiêu •Vai trò của Linux Shell •Quá trình thông dịch lệnh Shell •Khởi tạo biến Shell •Biến môi trường Shell •Viết Shell Script Đại cương về Shell • Hệ Shell: • Giúp tương tác giữa người dùng và hệ thống • Shell Linux hỗ trợ một tập lệnh mà có thể kết hợp chúng lại thành một script hay thành một chương trình có thể sử dụng nhiều lần. • Thiếu sót chính của ngôn ngữ script là những lệnh này phải thông dịch lại mỗi lần script thực thi. • Linux cung cấp nhiều tiện ích là những trình thông dịch cho ngôn ngữ C, C++, debugger, công cụ tổ chức project và công cụ quản lý code. • Kiến trúc tương tác với hệ Shell như hình sau Đại cương về Shell Thông dịch lệnh Shell 1. Đọc lệnh 2. Tìm file thực thi và tham số 3. Load file 4. Thực thi Shell Script • Là một file text • Lưu các lệnh Shell tuần tự •Cho phép hệ Shell đọc và thực thi các lệnh •Cho phép quản lý biến, quản lý các cấu trúc lập trình. •Hiển thị một chuỗi lên màn hình. •Chuỗi có thể đặt trong nháy đơn hoặc kép. •Mặc định lệnh echo sẽ tự xuống dòng. •Không xuống dòng: tham số -n $ echo "This is an example of the echo command"  This is an example of the echo command $ _ Lệnh echo Thực thi Shell Script • File script cần có quyền thực thi. Ví dụ với file script.sh: chmod u+x script.sh . script.sh • Lệnh  dùng thực thi một script và giữ nguyên các thay đổi môi trường mà Script đã tác động sau khi thoát khỏi Script. • Lệnh exec dùng thực thi một Script, sử dụng shell phụ khác Khởi tạo biến • Biến Shell Script: • Không cần khai báo kiểu. • Được xem nghiêm ngặt là chuỗi • Có thể tính toán được. • Không cần khai báo tường minh. • Tự cấp phát sau lần truy xuất đầu tiên. • Phép gán: =GiáTrị • Không dùng dấu khoảng trắng giữa tên =GiáTrị • Khi script kết thúc: Biến được hủy Đọc giá trị từ biến và vào biến •Dùng ký hiệu $ để đọc giá trị của biến Bien1=${Bien2} •Ký hiệu ngoặc để giới hạn tên biến •Đọc giá trị từ bàn phím vào biến: read $ read Biến cục bộ và toàn cục $ continent=Africa $ echo "$continent" Africa $ bash [Creates a new shell] $ echo "$continent" [There is no response] $ continent=Asia [Gives new value Asia to continent] $ echo "$continent" Asia Press d $ exit Các biến môi trường • HOME: Thư mục home của user • PATH: Chứa các biến đường dẫn • PS1: Ký hiệu dấu nhắc ($) • PS2: Ký hiệu dấu nhắc (>) • LOGNAME: Tên login • SHLVL: Cấp độ shell • SHELL: Hệ shell mặc định Ghi chú, tính toán trên biến  Dấu # dùng để ghi chú trong Script  Lệnh expr dùng để tính toán số học  Ví dụ: $ expr 4 + 5  Phép nhân sử dụng dấu \*  Chia lấy phần dư % Lệnh kiểm tra biểu thức  Lệnh test và [] dùng để ước lượng biểu thức logic  Cú pháp: test expression hoặc [ expression ]  Các phép so sánh khi kiểm tra chuỗi: =, !=, -n, -z  Các phép so sánh toán học: -eq (=), -ne (!=), -gt (>), -ge (>=), -lt (<), -le(<=)  Kiểm tra tập tin: test File Lệnh kiểm tra tập tin  Cú pháp: test FILE  Option: -d file : đúng nếu là thư mục -e file : tồn tại trên đĩa -f file : tập tin thông thường -g file : có xác lập set-group-id trên file -s file : có kích thước >0 -u file : có xác lập set-user-id -r file : cho phép đọc -w file: cho phép ghi -x file : cho phép thực thi Phép AND và phép OR  Cú pháp AND: Lệnh1 && Lệnh2  Cú pháp OR: Lệnh1 || Lệnh2 Lấy giá trị của một lệnh $(command) • Ví dụ: Count=$((count+1)) Câu lệnh if  Câu lệnh if if then [else ] fi  Lệnh ifelif if condition(s) then command(s) elif condition then command(s) else command(s) fi Lệnh exit • Dừng thực thi Script và quay về dấu nhắc • Ví dụ về lệnh exit: echo "Do you wish to quit?" read ans if [ $ans = "y" ] then exit fi Câu lệnh case • Cú pháp: case $variable-name in value1) command command;; value2) command command;; *) command;; esac Câu lệnh while Câu lệnh while while do done Ví dụ: reply=y while test "$reply" != "n“ do echo –n "Enter file name?" read fname cat ${fname} echo –n "wish to see more files :" read reply done Câu lệnh for • Lặp lại trên từng giá trị trong dãy • Cú pháp: for variable_name in do done • Ví dụ: for name in Ruby Samuel do echo "${name}" done Câu lệnh break và continue (ví dụ) while true do echo "Enter choice" echo "(press 'q' to exit)" echo "1 date 2 who" echo "3 ls 4 pwd" read choice case $choice in 1)date;; 2)who;; 3)ls;; 4)pwd;; q)break;; *)echo "That was not one of the choices";; esac done Câu lệnh test • Câu lệnh test dùng kiểm tra file và thư mục echo –n "Enter file name: " read fname if test -f $fname then echo "$fname is an ordinary file" elif test -d $fname then echo "$fname is a directory file" elif test -s $fname then echo "$fname is a not an empty file" elif test ! –r "$fname" then echo "No readable file called $fname exists" fi function ftype { if test -f $fname then echo "$fname is an ordinary file." elif test -d $fname then echo "$fname is a directory file." elif test ! -r "$fname" then echo "No readable file called $fname exists" fi } echo "Enter a file name" read fname ftype Hàm trong Shell Script echo "Enter string" read str len=`echo $str | wc -c` while test $len -ne 0 do temp_char=`echo $str | cut -c$len` rev_str=${rev_str}${temp_char} len=`expr $len - 1` done echo $rev_str Ví dụ Shell Script (Đảo chuỗi) echo "Enter string" read str len=`echo $str | wc -c` len=`expr $len - 1` l=`expr $len / 2` ctr=1 flag=0 while test $ctr -le $l do a=`echo $str | cut -c$ctr` b=`echo $str | cut -c$len` if test $a != $b then flag=1 break fi ctr=`expr $ctr + 1` len=`expr $len - 1` done if test $flag -eq 0 then echo "String is palindrome" else echo "String not a palindrome" fi Ví dụ Shell Script (Kiểm tra chuỗi đối xứng) Kiểm tra user nhập vào có trong hệ thống không? Nếu có, kiểm tra user có đang login vào hệ thống không? In thông báo. tmp=$( grep $tenuser:x /etc/passwd | wc –l ) if [ $tmp –eq 0 ] then echo “User $tenuser không có trong hệ thống” else echo “User $tenuser tồn tại trong hệ thống” grep $tenuser:x /etc/passwd kt=$( who | grep $tenuser | wc –l ) if [ $kt –ne 0 ] then echo “User $tenuser đang logon vào hệ thống” else echo “User $tenuser không logon vào hệ thống” fi Ví dụ Shell Script Thực hiện các phép toán +, -, \*, / của 2 số. tong=` expr $1 + $2 ` echo “Tong của 2 số $1 và $2 là : $tong” hieu=` expr $1 - $2 ` echo “Hiệu của 2 số $1 và $2 là : $hieu” tich=` expr $1 \* $2 ` echo “Tích của 2 số $1 và $2 là : $tich” th=` expr $1 / $2 ` echo “Thương của 2 số $1 và $2 là : $th” Ví dụ Shell Script Bài tập thực hành 1. Viết shellscript liệt kê quyền hạn và tên tất cả các file trong một thư mục. Đường dẫn thư mục được nhập và thông qua tham số script 2. Viết shellscript nhận tham số là một đường dẫn file, xuất ra quyền hạn của owner trên file đó (Doc, Ghi, ThucThi) 3. Viết shellscript nhập vào tên 1 thư mục, kiểm tra xem thư mục đã có hay chưa? Nếu có rồi yêu cầu đặt 1 tên khác, nếu chưa có tạo 40 thư mục con có tên MAY00, MAY01, Sau khi tạo xong, thông báo ra màn hình và liệt kê danh sách các thư mục đã tạo. 4. Viết shellscript kiểm tra giá trị nhập vào có phải là số nguyên tố hay không

Các file đính kèm theo tài liệu này:

  • pdflinux_bai_3_295.pdf