Bài giảng Linux: Chương 3 - Linux Shell Script được biên soạn nhằm mục tiêu giúp cho các bạn biết được 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. Mời các bạn tham khảo.
Linux Shell Script Âu Bửu Long – Lê Minh Triết Phiên 2014 Mục tiêu • Vai trị Linux Shell • Q 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 Shell • Hệ Shell: • Giúp tương tác người dùng hệ thống • Shell Linux hỗ trợ tập lệnh mà kết hợp chúng lại thành script hay thành chương trình sử dụng nhiều lần • Thiếu sót ngơn ngữ script lệnh phải thơng dịch lại lần script thực thi • Linux cung cấp nhiều tiện ích trình thơng dịch cho ngôn ngữ C, C++, debugger, công cụ tổ chức project cơng cụ quản lý code • Kiến trúc tương tác với hệ Shell hình sau Đại cương Shell Thông dịch lệnh Shell Đọc lệnh Tìm file thực thi tham số Load file Thực thi Shell Script • Là file text • Lưu lệnh Shell • Cho phép hệ Shell đọc thực thi lệnh • Cho phép quản lý biến, quản lý cấu trúc lập trình Lệnh echo • Hiển thị chuỗi lên hình • Chuỗi đặt nháy đơn kép • Mặc định lệnh echo 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 $ _ 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 script giữ nguyên thay đổi môi trường mà Script tác động sau khỏi Script • Lệnh exec dùng thực thi 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 chuỗi • Có thể tính tốn • Khơng cần khai báo tường minh • Tự cấp phát sau lần truy xuất • Phép gán: =GiáTrị • Khơng dùng dấu khoảng trắng tên =GiáTrị • Khi script kết thúc: Biến hủy Đọc giá trị từ biến vào biến • Dùng ký hiệu $ để đọc giá trị 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 Lệnh kiểm tra tập tin Cú pháp: test FILE Option: -d file : thư mục -e file : tồn đĩa -f file : tập tin thơng thường -g file : có xác lập set-group-id 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 phép OR Cú pháp AND: Lệnh1 && Lệnh2 Cú pháp OR: Lệnh1 || Lệnh2 Lấy giá trị lệnh $(command) • Ví dụ: Count=$((count+1)) Câu lệnh if Câu lệnh if Lệnh if…elif if if condition(s) then then command(s) [else ] elif condition fi then command(s) else command(s) fi Lệnh exit • • Dừng thực thi Script quay dấu nhắc Ví dụ 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 done Ví dụ: reply=y while test "$reply" != "n“ 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 giá trị dãy • Ví dụ: for name in Ruby Samuel echo "${name}" done Cú pháp: for variable_name in … done Câu lệnh break continue (ví dụ) while true echo "Enter choice" echo "(press 'q' to exit)" echo "1 date who" echo "3 ls 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 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 Hàm Shell Script 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 Ví dụ Shell Script (Đảo chuỗi) echo "Enter string" read str len=`echo $str | wc -c` while test $len -ne 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 (Kiểm tra chuỗi đối xứng) 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 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 then echo "String is palindrome" else echo "String not a palindrome" fi Ví dụ Shell Script Kiểm tra user nhập vào có hệ thống khơng? Nếu có, kiểm tra user có login vào hệ thống không? In thông báo tmp=$( grep $tenuser:x /etc/passwd | wc –l ) if [ $tmp –eq ] then echo “User $tenuser khơng có hệ thống” else echo “User $tenuser tồn hệ thống” grep $tenuser:x /etc/passwd kt=$( who | grep $tenuser | wc –l ) if [ $kt –ne ] then echo “User $tenuser 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 phép toán +, -, \*, / số tong=` expr $1 echo “Tong hieu=` expr $1 echo “Hiệu tich=` expr $1 echo “Tích th=` expr $1 / echo “Thương + $2 ` số $1 $2 : - $2 ` số $1 $2 : \* $2 ` số $1 $2 : $2 ` số $1 $2 $tong” $hieu” $tich” : $th” Bài tập thực hành Viết shellscript liệt kê quyền hạn tên tất file thư mục Đường dẫn thư mục nhập thông qua tham số script Viết shellscript nhận tham số đường dẫn file, xuất quyền hạn owner file (Doc, Ghi, ThucThi) Viết shellscript nhập vào tên thư mục, kiểm tra xem thư mục có hay chưa? Nếu có yêu cầu đặt tên khác, chưa có tạo 40 thư mục có tên MAY00, MAY01,… Sau tạo xong, thơng báo hình liệt kê danh sách thư mục tạo Viết shellscript kiểm tra giá trị nhập vào có phải số nguyên tố hay không ... Option: -d file : thư mục -e file : tồn đĩa -f file : tập tin thông thường -g file : có xác lập set-group-id 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... expression ] Các phép so sánh kiểm tra chuỗi: =, !=, -n, -z Các phép so sánh toán học: -eq (=), -ne (!=), -gt (>), -ge (>=), -lt (