Một số shell dưới LinuxTên Người phát triển Nơi Ghi chú KSH Korn SHell David Korn AT & T Bell Labs hơn CSH... Tạo môi trường phát triểntrình: mkdir ~/shell-scripts lưu vào ~/shell-script
Trang 1Lập trình shell
Trình bày: TS NGÔ BÁ HÙNG Email: nbhung@cit.ctu.edu.vn
Trang 2dùng đến kernel
Trang 3Một số shell dưới Linux
Tên Người phát triển Nơi Ghi chú
KSH
(Korn SHell) David Korn AT & T Bell Labs
hơn CSH
Trang 5Tại sao sử dụng shell script
Trang 6Tạo một shell script
Trang 8Tạo môi trường phát triển
trình: mkdir ~/shell-scripts
lưu vào ~/shell-scripts với tên là script-1.sh
• Chuyển thư mục hiện hành: cd ~/shell-scripts
• Gán quyền cho script-1.sh: chmod 755 script-1.sh
Trang 9Biến trong shell
– Được tạo và duy trì bởi Linux – Tên biến viết hoa
– Xem toàn bộ biến hệ thống bằng lệnh set hoặc printenv
– Được tạo và duy trì bởi người dùng – Tên biến viết thường
Trang 10Một vài biến hệ thống
BASH_VERSION= 4.0.33(1)-release Phiên bản của bash shell
hiện tại
PATH=/usr/bin:/sbin:/bin:/usr/sbin Các thư mục sẽ được tìm đến khi một
chương trình được yêu cầu thực thi
PWD=/home/nbhung/Desktop Thư mục hiện hành
Trang 11Biến định nghĩa bởi người dùng
Trang 12Linux Operating System
• Tổng quan về hệ điều hành Linux
• Hệ thống tập tin trên Linux
• Bộ thông dịch lệnh
• Lập trình shell script
Trang 13Lệnh echo
– -n không xuống dòng – -e biên dịch các ký tự sau như ký tự đặc biệt
● \c suppress trailing new line \n new line
● \r carriage return \t horizontal tab
● \\ backslash
Trang 14Lệnh echo - ví dụ
Toi la nbhung
Trang 15Bài tập
các thông tin sau
Trang 17Dấu nháy
• " Bao bọc chuỗi "
● $echo "Today is date"
Today is date
● $echo "Today is 'date'"
Today is 'date'
● $echo "Today is `date`"
Today is Tue Dec 29 14:48:45 ICT 2009
Trang 19Lệnh read
echo -n "Your first name please:"
read fname echo "Hello $fname, Lets be friend!"
$chmod 755 read.sh
$./read.sh
Your first name please: Ngo Ba Hung Hello Ngo Ba Hung, Lets be friend!
Trang 20echo -n "Nhap a="; read a
echo -n "Nhap b="; read b
Trang 22Ký tự đại diện
khoảng
một trong số các ký tự được liệt kê
một trong số các ký tự trong khoảng
Trang 23Ký tự đại diện - Ví dụ
$ls *.c # Liệt kê tất cả các tập tin có tên kết thúc với c
$ls fo? # Liệt kê tất cả các tập tin có tên 3 ký tự,
# hai ký tự bắt đầu là fo, ký tự thứ 3 là bất kỳ
$ ls [abc]* # Liệt kê tất cả các tập tin có tên
# với ký tự bắt đầu là a,b, hoặc c
$ls [a-c]* # Tương tự như trên
$ ls [!abc]* #L iệt kê tất cả các tập tin có tên không bắt
# đầu bằng ký tự a,b, hoặc c
Trang 24Nhiều lệnh trên một dòng lệnh
$date;who Tue Dec 29 15:39:12 ICT 2009 nbhung tty7 2009-12-29 14:04 (:0) nbhung pts/0 2009-12-29 14:19 (:0.0)
Trang 25Cú pháp của một lệnh
Trang 26Truy cập các thành phần của lệnh
$2 => bar; tham số thứ hai
$1 => foo; tham số thứ nhất
#!/bin/bash echo "Total number of command line argument are $#"
echo "$0 is script name"
echo "$1 is first argument"
echo "$2 is second argument"
echo "All of them are :- $* or $@"
$./print_arg.sh Hello World /print_arg.sh is script name Hello is first argument
World is second argument All of them are :- Hello World or Hello World
Trang 27Ống dẫn (pipe)
đối số nhập của một chương trình khác
• $ ls | more # In kết quả của lệnh ls từng trang màn hình
• $ ls -l | wc -l # In số lượng file có trong thư mục hiện hành
Trang 28Chuyển hướng xuất/nhập
$command > > output_file: xuất ra file
$command >> >> output_file: nối vào cuối tập tin
$cat > sname vivek
ashish zebra babu
$ sort < sname > sorted_names
$ cat sorted_names ashish
babu vivek
Trang 29Lọc dữ liệu
hotel.txt và lưu vào tập tin hlist:
$head -30 < hotel.txt | tail -10 | >hlist
và lưu vào tập tin u_sname
Trang 30Lệnh liên quan đến tiến trình
ps Xem các tiến trình của cửa sổ lệnh hiện tại
kill pid Giết (kết thúc) tiến trình có số hiệu là pid
kill pro_name Giết (kết thúc) tiến trình có tên là pro_name
ps -ag Lấy thông tin của tất cả tiến trình của bạn
kill 0 Giết tất cả tiến trình của bạn, trừ shell hiện tại
command & Thực thi chương trình command ở chế độ ngầm (background)
ps aux Hiển thị tất cả tiến trình cùng với tên người dùng
top Xem các tiến trình cùng với các tài nguyên đang sử dụng
pstree Hiển thị cây tiến trình
Trang 31Cấu trúc và dòng lặp
Trang 32Cấu trúc điều khiển
Trang 33Ví dụ về cấu trúc điều khiển
Trang 34Câu lệnh kiểm tra điều kiện
echo "$1 number is positive"
fi
$ chmod 755 ispostive
$ ispostive 5
Trang 36Các phép toán so sánh chuỗi
Phép toán dùng trong
String1 = string2 Chuỗi string1 bằng với chuỗi
string2 ? String1 != string2 Chuỗi string1 khác chuỗi string2 ?
string1 Chuỗi string1 thì khác NULL hoặc
chưa được định nghĩa -n string1 Chuỗi string1 thì khác NULL và đã
tồn tại -z string1 Chuỗi string1 là NULL và đã tồn tại
Trang 37Các phép toán kiểm tra tập tin
Phép toán dùng trong shell
-f file Tập tin file tồn tại hoặc là một
tập tin bình thường, không là một thư mục ?
không là một tập tin
Trang 39Cấu trúc if-else đơn cấp
• osch=0
• echo "1 Unix (Sun Os)"; echo "2 Linux (Ubuntu)";
• echo -n "Select your os choice [1 or 2]? "; read osch;
• if [ $osch -eq 1 ] ; then
• echo "You Pick up Unix (Sun Os)"
• else
• if [ $osch -eq 2 ] ; then
• echo "You Pick up Linux (Ubuntu)"
• else
• echo "What you don't like Unix/Linux OS."
• fi
Trang 40Cấu trúc if-then-else đa cấp
Trang 41Cấu trúc if-then-else đa cấp, ví dụ
Trang 43Vòng lặp for (1), ví dụ
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Error - Number missing from command line argument"
echo "Syntax : $0 number"
echo "Use to print multiplication table for given number"
Trang 45echo -e -n "\033[40m" #### set back background colour to black
echo "" #### print the new line ###
Trang 46Vòng lặp while
• Cú pháp
while [ condition ] do
Command1; Command2
done
• Ví dụ
n=$1; i=1 while [ $i -le 10 ] do
echo "$n * $i = `expr $i \* $n`"
i=`expr $i + 1`
Trang 48Câu lệnh case, ví dụ
echo -n "What do you want to rent?"; read rental
"car") echo "For $rental VND 20000 per k/m";;
"van") echo "For $rental VND10000 per k/m";;
"jeep") echo "For $rental VND 5000 per k/m";;
"bicycle") echo "For $rental VND 2000 per k/m";;
*) echo "Sorry, I can not gat a $rental for you";;
esac