SlideShare a Scribd company logo
LẬP TRÌNH SHELL
hoangvinh@free.fr
Nội dung
 Kernel
 Shell và lập trình Shell
Kernel ?
 Kernel là trái tim của HĐH Linux
 Đảm nhận các vai trò sau :
 Quản lý I/O
 Quản lý tiến trình(process)
 Quản lý tập tin
 Quản lý thiết bị
 Quản lý bộ nhớ
Linux Shell
Shell giúp cho chúng ta :
Công việc của Shell
Các loại Shell trên Linux
5
 Bourne shell: còn gọi là sh, do Steve Bourne tạo ra
 C-shell: còn gọi là csh, đi kèm với BSD UNIX
 Korn shell: còn gọi là ksh, do David Korn tạo ra
 Born Again shell: còn gọi là bash, tương tự nhưng
mới hơn Bourne shell. Bash là shell mặc định của
Linux
 Người dùng có thể chuyển đổi giữa các shell
 Hiển thị Shell : # echo $SHELL
Sử dụng Shell
 $ date --help
 $ man ls
 $ info bash
Tiến trình (Process)
 Tiến trình là một loại chương trình đảm nhiệm bởi
PC.
 # ls –lR
 Tại sao cần tiến trình ?
 # ls / -R | wc –l
 # ls / -R | wc -l &
Minh họa tiến trình
 Xem tất cả các tiến trình
 $ps
 kill {PID}
 $ ps –ag : Lấy thông tin từ các tiến trình đang chạy
 $ kill 0 : tắt tất cả process ngoại trừ Shell đang
dùng
9
Các lệnh quản lý tiến trình
 Lệnh ps: Xem danh sách các tiến trình
$ps
$ps aux
 Lệnh kill: Hủy tiến trình
$kill 1653
$kill -s SIGTERM 1653
 Lệnh top: Xem tần suất sử dụng tài nguyên của các tiến trình
$top
Chuyển đổi người dùng
10
 Lệnh id : Hiển thị định danh người dùng hiện thời
$id
 Lệnh su : Chuyển đổi người dùng hiện thời
$su
$su user1
Liệt kê người dùng
 Lệnh who: Liệt kê những người dùng đang đăng nhập
 $ who
11
Tắt và khởi động lại máy
 Lệnh shutdown: Tắt máy
$shutdown -h now
$shutdown -h -t5
 Lệnh reboot: Khởi động lại máy
$reboot
$shutdown -r now
Gắn các ổ đĩa
• Lệnh mount: Gắn các ổ đĩa
$mount /dev/cdrom /mnt/cdrom
• Lệnh umount: Gỡ bỏ các ổ đĩa
$umount /mnt/cdrom
Phím điều khiển
12
Ctrl-C, Ctrl-: Kết thúc tiến trình hiện thời
Ctrl-Z: Tạm dừng tiến trình hiện thời
Ctrl-D: Kết thúc việc nhập liệu
Ctrl-U: Xóa toàn bộ dòng lệnh bên trái con trỏ
Ctrl-W: Xóa một từ bên trái con trỏ
Ctrl-A: Di chuyển đến đầu dòng lệnh
Ctrl-E: Di chuyển đến cuối dòng lệnh
Phím điều khiển
13
Các phím di chuyển
 Phím mũi tên lên, xuống: di chuyển trong lịch sử các lệnh đã
được gõ
 Phím mũi tên trái, phải: di chuyển trong dòng lệnh
 Phím BACKSPACE: xóa ký tự bên trái con trỏ
 Phím ENTER: thực thi lệnh
• Lệnh history: Làm việc với lịch sử các lệnh đã được gõ
$history
$!2
!! : thực thi lệnh vừa được gõ
!pw : thực thi lệnh đã được gõ bắt đầu bằng pw
!$ : sử dụng đối số đã được gõ
!* : sử dụng lại tất cả đối số của lệnh vừa được gõ
Thao tác phím
14
Khả năng tự hoàn tất
 Sử dụng phím TAB để hoàn tất lệnh hay tên tập tin, tên thư mục
Một số ký tự đặc biệt
 # đặt ở đầu dòng lệnh, đánh dấu dòng lệnh như là chú thích
 ; ngăn cách các lệnh, cho phép đánh nhiều lệnh trên một dòng
 & đặt ở cuối dòng lệnh, cho phép chạy lệnh ở chế độ nền (dấu nhắc
sẽ lập tức hiện ra)
  tiếp tục dòng lệnh ở dòng mới
 | chuyển đầu ra của lệnh này thành đầu vào của lệnh kia
 (;) Gộp các lệnh trong dấu () các lệnh được phân cách bởi “;”
15
Cú pháp lệnh
 Cú pháp chung
 Command [Options] [Argument]
 Command = Tên lệnh
 Options = Các tùy chọn của lệnh
 Argument = Các đối số của lệnh
Các ký hiệu đại diện nhóm tập tin
16
 “*” đại diện cho một chuỗi (có thể rỗng) các ký tự bất kỳ
 “?” đại diện cho một ký tự bất kỳ
 “[ ]” đại diện cho một ký tự bất kỳ trong ngoặc vuông, có
thể sử dụng dấu - để liệt kê một khoảng ký tự liền nhau
Chuyển hướng Input <-> Output
 Trong Linux có thể chuyển Output thành input
 $ ls> filename
 Có 3 loại chuyển hướng : > ; >>; <
 > Redirector Symbol
 $ ls > myfiles # ghi đè thông tin nếu đã tồn tại file
 >> Redirector Symbol
 Syntax: Linux-command >> filename
 $ date >> myfiles # thêm thông tin vào phần cuối của file
 < Redirector Symbol
 Linux-command < filename
 $ cat < myfiles # Nhận đầu vào lệnh vào tập tin
Ống dẫn (pipe)
 Ống dẫn là cách để kết nối output của một chương
trình thành input của một chương trình khác mà
không dùng file tạm
 Ống dẫn thường dùng đễ thực thi nhiều hơn 1 câu
lệnh trên cùng một dòng.
 Cú pháp : command1 | command2
Lập trình Shell
 Chương trình shell là một loạt các câu lệnh.
 Biến trong Shell :
 Biến hệ thống (System variables )
 Biến do người dùng định nghĩa (User defined variables
UDV)
Một vài biến hệ thống
 Xem các biến trong hệ thống $set |more
System Variable Meaning
BASH=/bin/bash Our shell name
BASH_VERSION='4.2.24(1)-release' Our shell version name
COLUMNS=65 No. of columns for our screen
HOME=/home/anhpham Our home directory
PATH=/usr/lib/ccache Our path settings
USER=anhpham User name who is currently login to this
PC
Ưu và nhược của Shells
 Ưu điểm :
 Ngôn ngữ diễn dịch : dễ dàng dò tìm và phát hiện lỗi;
thay đổi chỉnh sửa script không cần phải biên dịch lại
từ đầu.
 Ngôn ngữ phù hợp với ứng dụng : ống nối, thay thế
lệnh và các biến trong môi trường Unix
 Cho phép kết nối các thành phần với các ngôn ngữ
khác :
 Input-Output dẫn xuất : các biến, lỗi, kết quả…
Ưu và nhược của Shells
 Nhược điểm :
 Bắt nguồn từ Unix, ngôn ngữ lập trình dùng để lập trình, cú
pháp của shell không dễ tiếp cận cho người mới bắt đầu.
 Thêm hoặc bớt khoảng trắng trong câu lệnh sẽ gây lỗi cú
pháp
 bash sở hữu nhiều cú pháp để thao tác cùng một chức năng
=> đôi khi gây ra sự không tương thích với các phiên bản
shell
 Các ký tự đặc biệt dùng trong câu lệnh sẽ có ý nghĩa khác
nhau trong từng hoàn cảnh khác nhau, gây khó khăn khi sử
dụng
Định nghĩa biến người dùng
 Cú pháp : variablename = value
 Ví dụ :
 $ a=90 # this is ok
 $ 90=a # Error, NOT Ok, giá trị phải ở bên phải
 Định nghĩa biến ‘xe' có giá trị Bus
 $ xe=Bus
 Định nghĩa biến n có giá trị 10
 $ n=10
Quy tắc đặt tên biến ( UDV và System Variable)
 Tên biến phải bắt đầu bằng 1 ký tự chữ cái hoặc (_), được tiếp bởi
1 ký tự chữ cái.
 Biến hợp lệ :
 HOME
 SYSTEM_VERSION
 no
 Không dùng khoảng trắng trước và sau dấu “=”
 $ no =10 #không hợp lệ
 $ no= 10 #không hợp lệ
 $ no = 10 #không hợp lệ
 $ no=10 # OK
 Biến phân biệt chữ hoa và chữ thường
 $ No=11
 $ NO=20
 $ nO=2
Quy tắc đặt tên biến ( UDV và System Variable)
 Có thể đặt biến NULL như sau:
 $ no=
 $ no=“”
 Không dùng ?,* etc để đặt tên biến
 Để xuất giá trị biến, thêm vào $
 $ no=10
 $ echo $no
Ví dụ minh hoạ
 Định nghĩa biến x có giá trị 3 và xuất ra màn hình
 $ x=3
 $ echo $x
 Định nghĩa biến k có giá trị xy
 $ k=xyi
 $ echo $k
 In tổng của hai số
 $ echo 6 + 3
 $ expr 6 + 3
 $ expr 6+3
Viết Shell script
 Ctrl + D
 Để thực thi shell :
 $ ./firstshell --.error
 $ chmod +x firstshell
 $ ./first
$ cat > first shell
#
# My first shell script
#
clear
echo “test"
Làm thế nào sử dụng Shell
 chmod để gán quyền execute cho script
 Cú pháp : chmod +x shell-script-name
chmod 777 shell-script-name
 Thực thi script :
Cú pháp : ./shell-program-name
Ví dụ : $ ./first
 Hoặc :
 $ bash shell-program-name
 $ /bin/sh shell-program-name
Làm thế nào sử dụng Shell
 $ /bin/sh /home/vinhth/shellscript
 Thư mục /bin chứa các file thực thi. Có thể chạy
script trực tiếp khi copy vào thư mục /bin
 $ cp first ~/bin
 $ first
Một số lệnh liên quan đến lập trình Shell
 echo [options] [string, variables...]
 -n : không in ký tự xuống dòng.
 -e : cho phép hiểu những ký tự theo sau dấu trong chuỗi
 a : alert (tiếng chuông)
 b : backspace
 c : không xuống dòng
 n : xuống dòng
 r : về đầu dòng
 t : tab
 : dấu
Một số lệnh liên quan đến lập trình Shell
 Dấu nháy kép - “Double Quotes” : tất cả trong “” sẽ được
bỏ qua (ngoại trừ  và $)
 Dấu nháy đơn – ‘Single quotes’ : tất cả trong ‘’ không thay
đổi
 Dấu nháy huyền- `Back quotes`: thực thi câu lệnh
 $ echo “Today is date” ( Xuất chuỗi )
 $ echo "Today is `date`". ( Xuất giá trị ngày)
 Shell và số học :
 $ expr 1 + 3 (CHÚ Ý KHOẢNG TRẮNG)
 $ echo "expr 6 + 3”
 $ expr 10 * 3 (PHÉP NHÂN : *)
 $ $ echo "expr 6 + 3" # Xuất : expr 6 + 3
 $ echo 'expr 6 + 3' # Xuất : expr 6 + 3
Một số lệnh liên quan đến lập trình
Shell
 echo $(( 20 + 5 ))
 x=5
echo $(( x++ ))
echo $(( x++ ))
 x=2
y=3
echo $(( x ** y ))
Tính toán trên Shell
 $ bc # tính toán trên Linux
 5 – 2
 7
 5 / 2
 5 > 2
 0 # trả lời của hệ thống
 5 > 12
 5 == 10
 5 != 2
 5 == 5
 12 < 2
Xử lý câu lệnh
 Thực hiện câu lệnh với 1 file không tồn tại
 $ ls file_luu_tru
 $ file_luu_tru : No such file or directory
Sự cần thiết của tham số trong câu
lệnh
 $ rm {file-name}
 $ ls -a /*
Ví dụ minh họa
 Lưu script Ctrl+d
 $ chmod +x demo
 $ ./demo Hello World
 $ cp demo ~/bin
 $ demo
$ cat > demo
#!/bin/sh
#
# Script that demos, command line
#
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 :- $*"
Trạng thái thoát
 Mặc định sau khi kết thúc câu lệnh, hệ thống sẽ trả về 2 giá
trị :
 Lệnh thành công, giá trị =0
 Lệnh không thành công, lỗi : giá trị >0
 $ rm thu_muc
 rm: cannot remove thu_muc': No such file or directory
 $ echo $?
 $ ls
 $ echo $?
CẤU TRÚC ĐIỀU KHIỂN
hoangvinh@free.fr
Cấu trúc : if..fi
 $cat sho
 $echo $
 $ chmod +x sho
 $./sho fs
 $ ./sho foo
if condition
then
command1 if condition is true or if exit status
of condition is 0 (zero)
...
...
fi
$ cat > sho
#!/bin/sh
#
#Script to print file
#
if cat $1
then
echo -e "nnFile $1, found and successfully echoed"
Fi
Cấu trúc : if..fi
 $ chmod +x trmif cat > trmif
#
# Script to test rm command and exist status
#
if rm $1
then
echo "$1 file deleted"
fi
Cấu trúc : if..fi – kiểm tra biểu thức
 $ chmod +x soduong
 $ ./soduong 5
 $./soduong -45
 $./soduong
 ./soduong: test: -gt: unary operator expected
$ cat > soduong
#!/bin/sh
#
# Script to see whether argument is positive
#
if test $1 -gt 0
then
echo "$1 number is positive"
fi
Toán tử trong Shell Script
Toán tử trong Shell Script
 Toán tử trên chuỗi :
 Trên file
 Kết hợp
Cấu trúc : if...else...fi
if condition
then
command1 if condition is true or
if exit status
of condition is 0(zero)
...
...
else
command2 if condition is false or
if exit status
of condition is >0 (nonzero)
...
...
fi
$ cat > kiemtra
#!/bin/sh
#
# kiem tra so duong hay am
#
if [ $# -eq 0 ]
then
echo "$0 : You must give/supply one integers"
exit 1
fi
if test $1 -gt 0
then
echo "$1 number is positive"
else
echo "$1 number is negative"
fi
Cấu trúc if-then-else lồng nhau
if condition
then
condition is zero (true - 0)
execute all commands up to elif
statement
elif condition1
condition1 is zero (true - 0)
execute all commands up to elif
statement
elif condition2
condition2 is zero (true - 0)
execute all commands up to elif
statement
else
None of the above
condtion,condtion1,condtion2 are true (i.e.
all of the above nonzero or false)
execute all commands up to fi
fi
$ cat > etf
#!/bin/sh
# Script to test if..elif...else
#
if [ $1 -gt 0 ]; then
echo "$1 is positive"
elif [ $1 -lt 0 ]
then
echo "$1 is negative"
elif [ $1 -eq 0 ]
then
echo "$1 is zero"
else
echo "$1 is not number, give number"
fi
Vòng lặp for
for { variable name } in { list }
do
execute one for each item in the
list until the list is
not finished (And repeat all
statement between do and done)
done
$ cat > testfor
#!/bin/sh
for i in 1 2 3 4 5
do
echo “Xin chao $i times"
done
Vòng lặp for
$ cat > mtable
#!/bin/sh
# kiem tra vong lap
if [ $# -eq 0 ]
then
echo "Error – Cau lenh sai"
echo "Syntax : $0 number"
echo “Xuat ra bang cuu chuong"
exit 1
fi
n=$1
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i * $n`"
done
Vòng lặp while
while [ condition ]
do
command1
command2
command3
..
....
done
$cat > nwhile
#!/bin/sh
#Script to test while statement
#
if [ $# -eq 0 ]
then
echo "Error – Cau lenh sai"
echo "Syntax : $0 number"
echo " In ra bang cuu chuong"
exit 1
fi
n=$1
i=1
while [ $i -le 10 ]
do
echo "$n * $i = `expr $i * $n`"
i=`expr $i + 1`
done
Cấu trúc in case
case $variable-name in
pattern1) command
...
..
command;;
pattern2) command
...
..
command;;
patternN) command
...
..
command;;
*) command
...
..
command;;
esac
$ cat > car
# if no vehicle name is given
# i.e. -z $1 is defined and it is NULL
# if no command line arg
if [ -z $1 ]
then
rental="*** Unknown vehicle ***"
elif [ -n $1 ]
then
# otherwise make first arg as rental
rental=$1
fi
case $rental in
“xehoi") echo "For $rental Rs.20 per k/m";;
“xedap") echo "For $rental Rs.5 per k/m";;
“honda") echo "For $rental 20 paisa per k/m";;
*) echo "Sorry, I can not gat a $rental for you";;
esac
Lệnh break và continue
#!/bin/sh
a=10
while [ $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
$cat breaktest
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
Lệnh break và continue
$ cat >continuetest
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
Câu lệnh read
 Cú pháp : read varible1, varible2,...varibleN
$ cat > sayhello
#
#Script to read your name from key-board
#
echo "Your first name please:"
read fname
echo "Hello $fname, Lets be friend!"
command1;command2
 $ date;who
- Chức năng: Cho phép ước lượng một biểu thức chứa
biến
- Ví dụ:
foo=10
x=foo
y=‘$’$x
echo $y
 Kết quả $foo
Dùng lệnh evan
foo=10
x=foo
eval y=‘$’$x
echo $y
Kết quả : 10
Lệnh eval
Lệnh exec
- Chức năng: Dùng để gọi một lệnh bên ngoài khác. Thông thường
lệnh exec sẽ gọi một shell phụ khác với shell mà script đang thực thi
Lệnh exit n
- Chức năng: Dùng để thoát ra khỏi shell đang gọi và trả về mã lỗi n
- Mã lỗi ‘0’ được coi là thành công
Lệnh exec và exit
Lệnh printf
- Chức năng: Tương tự như lệnh printf của thư viện C
- Danh sách các ký tự đặc biệt dùng chung với dấu “”, gọi là chuỗi
thoát
Lệnh return
- Chức năng: Trả về giá trị của hàm
Lệnh set
- Chức năng: Dùng để thiết lập giá trị cho các tham số môi trường như
$1,$2,$3,v.v... Ngoài ra, lệnh này còn có chức năng loại bỏ những
khoảng trắng không cân thiết và đặt nội dung của chuỗi truyền cho nó
vào các biến tham số
#set This is parameter
#echo $1
This
#echo $2
is
Lệnh return và set
Lệnh shift
- Chức năng: Di chuyển nội dung các tham số môi trường $1,
$2,$3,v.v... xuống một vị trí. (Do ta chỉ có tối đa 9 tham số $1..$9)
Lệnh trap
(tham khảo thêm)
Lệnh shift, trap
- Chức năng: Loại bỏ biến khỏi môi trường shell
- Lệnh unset rất ít được sử dụng
- Ví dụ:
#!/bin/sh
foo=“Hello World”
echo $foo
unset foo
echo $foo
- Kết quả chương trình sẽ in ra chuỗi rỗng (do lúc này biến foo
không tồn tại nữa)
Lệnh unset
Lệnh đi kèm /dev/null
 Cú pháp : command > /dev/null : gửi tới những
output không muốn xuất hiện
 $ ls > /dev/null
Biến cục bộ và toàn cục
 Biến cục bộ (local variables) là các biến ta sử dụng. Nếu tải bản
copy của shell $/bin/bash, shell mới sẽ bõ qua tất cả các biến cũ
 Ví dụ :
 $x=5
 $echo $x
 5
 $/bin/bash
 $echo $x
 NOTE:-Empty line printed
 $x=7
 $exit
 $echo $x
Từ khóa export
 Có thể copy biến shell cũ tới shell mới, biến như vậy gọi là
biến toàn cục.
 Cú pháp : export variable1, variable2,.....variableN
 $ xe=Bus
 $ echo $xe
 Bus
 $ export xe
 $ /bin/bash
 $ echo $xe
 Bus
 $ exit
 $ echo $xe
Điều kiện thực th: && và ||
 Toán tử điều khiển :
 && : AND
 Cú pháp command1 && command2 : command1 được thực
thi, iff command1 trả về giá trị thoát 0.
 || : OR
 Cú pháp : command1 || command2 : command2 được thực
thi iff command1 trả về giá trị thoát non-zero
Hoặc :
command1 && comamnd2 if exist status is zero || command3
if exit status is non-zero
Input – Output chuyển hướng
 $ cat > myft
 This is my file # ctrl D
 $ cal
 $ cal >myfile #lưu
 $ cat >number
 $sort <number
Input – Output chuyển hướng
$cat >demosc
#!/bin/sh
if [ $# -ne 2 ]
then
echo "Error : Number are not supplied"
echo "Usage : $0 number1 number2"
exit 1
fi
ans=`expr $1 + $2`
echo "Sum is $ans"
Hàm
 Hàm có vai trò quan trọng trong Shell
function-name ( )
{
command1
command2
.....
...
commandN
return
}
$ SayHello()
{
echo "Hello $LOGNAME !”
return
}
Dò lỗi – debug trong shell
- Do script là lệnh văn bản được shell thông dịch nên
việc dò lỗi không khó như các chương trình biên dịch
nhị phân
- Quá trình dò lỗi thì shell sẽ in ra số thứ tự của dòng
gây lỗi. Ta cũng có thể thêm vào lệnh echo để in ra nội
dung của các biến có khả năng gây lỗi cho chương trình
 Có thể dùng set để đặt một số tùy chọn cho shell hoặc
đặt thêm tham số khi gọi shell thực thi script
$ bash -x script-name
$ bash -x domains.sh
Một số tùy chọn khi dùng lệnh set
70
71
Xử lý chuỗi
1. Khởi tạo một chuỗi
string=abcDefghu1234EDstuV
2. Lấy độ dài một chuỗi
$ echo {#string}
echo `expr length $string`
echo `expr "$string" : ".*"`
3. Định vị một ký tự trong string
$ echo `expr index "$string" c `
$echo `expr index "$string" E`
72
stringZ=abcABC123ABCabc
4.Lọc N ký tự đầu tiên của chuỗi
$echo ${stringZ:0}
echo ${stringZ:7:3} # lấy từ vị trí thứ 7, 3 ký tự
5.Lọc các ký tự từ đầu chuỗi trừ N ký tự cuối cùng
${string: -N}
echo ${stringZ:-4}
echo ${stringZ:(-4)}
6.Lọc N ký tự bắt đầu từ ký tự số M
echo `expr substr $string M N `
7.Lọc các ký tự từ a* đến u (đầu tiên)
$ echo ${stringZ#a*C} # 123ABCabc
$echo ${stringZ#a*3}
Xử lý chuỗi
73
stringZ=abcABC123ABCabc
$echo ${stringZ#*123}
${stringZ%kytu* kytu} #abcDef1234ED
${stringZ%substr* kytu} #abcDefghu1
${stringZ%%kytu* kytu} #abcDefgh
${string/substr/replacement}
#xyzDefghu1234EdstuV
$ echo ${stringZ% *} : xóa từ bên phải
Xử lý chuỗi
74
12. Loc N ký tự kể từ ký tự thứ M vd : N=3 , M=4
read N
echo `expr substr $string $M $N ` # Def
13.Lọc các ký tự kể từ chuỗi con “substr”
string1=xyzabcd123xyzthung
{string1%%substr*} #xyz
14. Lọc N ký tự đầu tiên
${string1:N} #N=3:abcd123xyzthung
${string1#kytu*kytu} #abcd123xyzthung
15.Lọc các ký tự kể từ substr trở về trươc
${string1##*substr}#thung
Xử lý chuỗi
75
Xử lý chuỗi trong shell
#!/bin/bash
string=abcDefghu1234EDstuV
echo ${#string} 19
echo `expr lengt#h $string` #19
echo `expr index "$string" c ` #3
echo `expr index "$string" E ` #14
echo ${string:2} # cDefghEDstuVF
echo ${string: -3} # tuV
echo `expr substr $string 3 5 `# cDefg
echo ${string#a*u} # 1234EDstuV
76
Xử lý chuỗi trong script
echo ${string#*123} #4EDstuV
echo ${string##a*u} # V
echo ${string%s*V} #abcDefghu1234ED
echo ${string%234*V} #abcDefghu1
echo ${string%%u*V} #abcDefgh
echo ${string/abc/xyz}
#xyzDefghu1234EDstuV
read N
echo `expr substr $string 3 $N `
77
Xử lý mảng
 array[xx]
1.Khai báo mảng : declare –a array
2. Lấy giá trị mảng : ${array[xx]}
${array[@]} hoặc ${array[*]} : lâý tât́ cả phân tử của
mảng
${#array[@]} hoăc̣${#array[*]} : tông số phâǹ tử của
mảng
Ví dụ :
array[5]=`expr ${array[11]} + ${array[13]}`
Một cách khác
array=( zero one two three four )
-> array[0]=zero ; array[4]=four
78
 Cách khác :
array=( [xx]=XXX [yy]=YYY ...)
array=([17]=seventeen [21]=twenty-
one)
Ví dụ :
array=( zero one two three four five )
echo ${array[0]} # zero
echo ${array:0} # zero
echo ${array:1} # ero : lâý từ vị trí số 1 cuả
phân tử thư ́ nhất
Xử lý mảng
79
arrayZ=( one two three four five five )
 echo ${#array[0]} # 3 : chiều daì cuả phần tử thứ nhất
echo ${#array} # 4
echo ${#array[1]} # 3 : chiều daì cuả phần tử thứ 2
echo ${#array[*]} # 6 : số phần tử của mảng
echo ${#array[@]} # 6 : số phâǹ tử của mảng.
Ví dụ :
array2=( [0]="first element" [1]="second
element" [3]="fourth element" )
echo ${array2[0]} # first element
echo ${array2[1]} # second element
echo ${array2[2]} # không khơỉtaọnên
có giátrị null
echo ${array2[3]} # fourth element
80
Xử lý mảng
 Ví dụ :
arrayZ=( one two three four five
five )
echo ${arrayZ[@]:0} # one two three four
five five
echo ${arrayZ[@]:1} # two three four five
five : lâý từ̉ phân tử thứ 1
81
echo ${arrayZ[@] 2} # two three : lâý
phân tử 1 đến 2
 Khai báo mảng rỗng
array0=( first second third )
array1=( ' ' ) # "array1" có 1 phần tử rôñg.
array2=( ) # mảng rỗng

82
 Thêm phân tử vào mảng
array0=( "${array0[@]}" "new1" )
# ${array0[@]} là toan bộ mang cũ, new1 là phần tử mới
array1=( "${array1[@]}" "new1" )
array2=( "${array2[@]}" "new1" )
hoặc
array0[${#array0[*]}]="new2"
array1[${#array1[*]}]="new2"
array2[${#array2[*]}]="new2"
83
 Sao chép mảng
array2=( "${array1[@]}" ) hoặc
array2="${array1[@]}"
2. Xóa mảng : unset
Ví dụ :
unset array[1] : xoá phân tử thứ 2 của
mảng array
unset array : xóa tòan bộ mảng
#!/bin/bash
while :
do
clear
echo "---------------------------------------
"
echo " Main Menu"
echo "---------------------------------------
"
echo "[1] Show today date/time"
echo "[2] Show all files in current
directory"
Tạo menu tương tać vơí ngươì dùng.
85
echo "[3] Show calendar"
echo "[4] Exit/Stop"
echo "======================="
echo -n "Enter your choice [1-4]: "
read choice
case $choice in
1) echo "Today is `date` "
echo "Press Enter key to continue ...";
read;;
2) echo "Files in $PWD"; ls -l
echo "Press Enter key to continue...";
read;;
3) cal ; echo "Press Enter key to
continue..."; read;;
4) exit 0;;
*) echo "Please choice 1,2,3,4. Press Enter
key to continue..."; read;;
esac
done
Tạo menu tương tać vơí ngươì dùng.

More Related Content

What's hot

An toàn hệ điều hành PTIT
An toàn hệ điều hành PTITAn toàn hệ điều hành PTIT
An toàn hệ điều hành PTIT
Phạm Trung Đức
 
Ky thuat-truyen-so-lieu
Ky thuat-truyen-so-lieuKy thuat-truyen-so-lieu
Ky thuat-truyen-so-lieuNguyen Vong
 
Thiết kế mạng LAN cho công ty 2 tầng
Thiết kế mạng LAN cho công ty 2 tầng Thiết kế mạng LAN cho công ty 2 tầng
Thiết kế mạng LAN cho công ty 2 tầng
ThíckThọ Thì ThêThảm
 
Giáo trình mạng máy tính
Giáo trình mạng máy tínhGiáo trình mạng máy tính
Giáo trình mạng máy tính
Hoài Phạm
 
Hệ điều hành (chương 3)
Hệ điều hành (chương 3)Hệ điều hành (chương 3)
Hệ điều hành (chương 3)realpotter
 
Đề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOT
Đề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOTĐề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOT
Đề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOT
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Giao thuc ip
Giao thuc ipGiao thuc ip
Giao thuc ipĐăng DC
 
Hệ điều hành (chương 4)
Hệ điều hành (chương 4)Hệ điều hành (chương 4)
Hệ điều hành (chương 4)realpotter
 
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải PhòngĐề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Dịch vụ viết bài trọn gói ZALO: 0909232620
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mở
Thuyet Nguyen
 
Cau hoi trac_nghiem
Cau hoi trac_nghiemCau hoi trac_nghiem
Cau hoi trac_nghiem
tuyencongchuc
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàng
leemindinh
 
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư việnSlide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
The Nguyen Manh
 
Hệ điều hành (chương 2)
Hệ điều hành (chương 2)Hệ điều hành (chương 2)
Hệ điều hành (chương 2)realpotter
 
Hệ thống quản lý rạp chiếu phim
Hệ thống quản lý          rạp chiếu phimHệ thống quản lý          rạp chiếu phim
Hệ thống quản lý rạp chiếu phim
vennguyennoinho
 
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Tú Cao
 
Báo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngBáo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạng
jackjohn45
 
Tìm hiều về mạng riêng ảo VPN-Virtual Private Network
Tìm hiều về mạng riêng ảo VPN-Virtual Private Network Tìm hiều về mạng riêng ảo VPN-Virtual Private Network
Tìm hiều về mạng riêng ảo VPN-Virtual Private Network
AskSock Ngô Quang Đạo
 

What's hot (20)

An toàn hệ điều hành PTIT
An toàn hệ điều hành PTITAn toàn hệ điều hành PTIT
An toàn hệ điều hành PTIT
 
Ky thuat-truyen-so-lieu
Ky thuat-truyen-so-lieuKy thuat-truyen-so-lieu
Ky thuat-truyen-so-lieu
 
Thiết kế mạng LAN cho công ty 2 tầng
Thiết kế mạng LAN cho công ty 2 tầng Thiết kế mạng LAN cho công ty 2 tầng
Thiết kế mạng LAN cho công ty 2 tầng
 
Giáo trình mạng máy tính
Giáo trình mạng máy tínhGiáo trình mạng máy tính
Giáo trình mạng máy tính
 
Hệ điều hành (chương 3)
Hệ điều hành (chương 3)Hệ điều hành (chương 3)
Hệ điều hành (chương 3)
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Đề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOT
Đề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOTĐề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOT
Đề tài: Xây dựng chương trình quản lý dịch vụ vận chuyển, HOT
 
Giao thuc ip
Giao thuc ipGiao thuc ip
Giao thuc ip
 
Hệ điều hành (chương 4)
Hệ điều hành (chương 4)Hệ điều hành (chương 4)
Hệ điều hành (chương 4)
 
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải PhòngĐề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mở
 
Cau hoi trac_nghiem
Cau hoi trac_nghiemCau hoi trac_nghiem
Cau hoi trac_nghiem
 
--De cuong on tap hdh
 --De cuong on tap hdh --De cuong on tap hdh
--De cuong on tap hdh
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàng
 
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư việnSlide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
 
Hệ điều hành (chương 2)
Hệ điều hành (chương 2)Hệ điều hành (chương 2)
Hệ điều hành (chương 2)
 
Hệ thống quản lý rạp chiếu phim
Hệ thống quản lý          rạp chiếu phimHệ thống quản lý          rạp chiếu phim
Hệ thống quản lý rạp chiếu phim
 
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
 
Báo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngBáo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạng
 
Tìm hiều về mạng riêng ảo VPN-Virtual Private Network
Tìm hiều về mạng riêng ảo VPN-Virtual Private Network Tìm hiều về mạng riêng ảo VPN-Virtual Private Network
Tìm hiều về mạng riêng ảo VPN-Virtual Private Network
 

Similar to Lập trình Shell 1.pdf

Project name
Project nameProject name
Project name
thom Tomu
 
Quản lý tiến trình
Quản lý tiến trìnhQuản lý tiến trình
Quản lý tiến trình
Hanh Nguyễn Văn
 
Cac lenh linux_co_ban
Cac lenh linux_co_banCac lenh linux_co_ban
Cac lenh linux_co_ban
Nguyen Anh
 
Th linux
Th linuxTh linux
Th linux
thocntt
 
Linux2 lap trinhshellchohocvien
Linux2 lap trinhshellchohocvienLinux2 lap trinhshellchohocvien
Linux2 lap trinhshellchohocvienasakebigone
 
Các lệnh shell cơ bản trong linux
Các lệnh shell cơ bản trong linuxCác lệnh shell cơ bản trong linux
Các lệnh shell cơ bản trong linux
Thiên Thần Máy Tính
 
Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)
laonap166
 
Hop ngu mips
Hop ngu mipsHop ngu mips
Hop ngu mips
mster_dang
 
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfLP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
Chuong
 
Cài đặt quản trị hệ điều hành Ubuntu 12.0
Cài đặt quản trị  hệ điều hành Ubuntu 12.0Cài đặt quản trị  hệ điều hành Ubuntu 12.0
Cài đặt quản trị hệ điều hành Ubuntu 12.0
Cường Nguyễn Tam
 
Cac lenh co_ban_linux
Cac lenh co_ban_linuxCac lenh co_ban_linux
Cac lenh co_ban_linux
gofriv
 
Lesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingLesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingThang Man
 
Các quy định& chuẩn trong lập trình NukeViet
Các quy định& chuẩn trong lập trình NukeVietCác quy định& chuẩn trong lập trình NukeViet
Các quy định& chuẩn trong lập trình NukeViet
Vu Thao
 
tài liệu Mã nguồn mở Lap trình shells
tài liệu Mã nguồn mở  Lap trình shellstài liệu Mã nguồn mở  Lap trình shells
tài liệu Mã nguồn mở Lap trình shells
Thuyet Nguyen
 
06 the command line
06  the command line06  the command line
06 the command lineCơn Gió
 

Similar to Lập trình Shell 1.pdf (20)

ShellProgramming
ShellProgrammingShellProgramming
ShellProgramming
 
9 bash
9 bash9 bash
9 bash
 
9 bash
9 bash9 bash
9 bash
 
Project name
Project nameProject name
Project name
 
Php02 ngon nguphp
Php02 ngon nguphpPhp02 ngon nguphp
Php02 ngon nguphp
 
Thuchanh unix moi
Thuchanh unix moiThuchanh unix moi
Thuchanh unix moi
 
Quản lý tiến trình
Quản lý tiến trìnhQuản lý tiến trình
Quản lý tiến trình
 
Cac lenh linux_co_ban
Cac lenh linux_co_banCac lenh linux_co_ban
Cac lenh linux_co_ban
 
Th linux
Th linuxTh linux
Th linux
 
Linux2 lap trinhshellchohocvien
Linux2 lap trinhshellchohocvienLinux2 lap trinhshellchohocvien
Linux2 lap trinhshellchohocvien
 
Các lệnh shell cơ bản trong linux
Các lệnh shell cơ bản trong linuxCác lệnh shell cơ bản trong linux
Các lệnh shell cơ bản trong linux
 
Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)
 
Hop ngu mips
Hop ngu mipsHop ngu mips
Hop ngu mips
 
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfLP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
 
Cài đặt quản trị hệ điều hành Ubuntu 12.0
Cài đặt quản trị  hệ điều hành Ubuntu 12.0Cài đặt quản trị  hệ điều hành Ubuntu 12.0
Cài đặt quản trị hệ điều hành Ubuntu 12.0
 
Cac lenh co_ban_linux
Cac lenh co_ban_linuxCac lenh co_ban_linux
Cac lenh co_ban_linux
 
Lesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingLesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell Programming
 
Các quy định& chuẩn trong lập trình NukeViet
Các quy định& chuẩn trong lập trình NukeVietCác quy định& chuẩn trong lập trình NukeViet
Các quy định& chuẩn trong lập trình NukeViet
 
tài liệu Mã nguồn mở Lap trình shells
tài liệu Mã nguồn mở  Lap trình shellstài liệu Mã nguồn mở  Lap trình shells
tài liệu Mã nguồn mở Lap trình shells
 
06 the command line
06  the command line06  the command line
06 the command line
 

Recently uploaded

DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
thanhluan21
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
Nguyen Thanh Tu Collection
 
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
HngL891608
 
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
Nguyen Thanh Tu Collection
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
hieutrinhvan27052005
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
Nguyen Thanh Tu Collection
 
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúngTừ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
MinhSangPhmHunh
 
tiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ htiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ h
huynhanhthu082007
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
lamluanvan.net Viết thuê luận văn
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Man_Ebook
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
my21xn0084
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
khanhthy3000
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
SmartBiz
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
NamNguynHi23
 
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Bồi Dưỡng HSG Toán Lớp 3
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
HiYnThTh
 
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
duyanh05052004
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
QucHHunhnh
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
AnhPhm265031
 

Recently uploaded (19)

DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
 
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
 
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
 
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúngTừ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
 
tiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ htiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ h
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
 
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
 
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
 

Lập trình Shell 1.pdf

  • 2. Nội dung  Kernel  Shell và lập trình Shell
  • 3. Kernel ?  Kernel là trái tim của HĐH Linux  Đảm nhận các vai trò sau :  Quản lý I/O  Quản lý tiến trình(process)  Quản lý tập tin  Quản lý thiết bị  Quản lý bộ nhớ
  • 4. Linux Shell Shell giúp cho chúng ta : Công việc của Shell
  • 5. Các loại Shell trên Linux 5  Bourne shell: còn gọi là sh, do Steve Bourne tạo ra  C-shell: còn gọi là csh, đi kèm với BSD UNIX  Korn shell: còn gọi là ksh, do David Korn tạo ra  Born Again shell: còn gọi là bash, tương tự nhưng mới hơn Bourne shell. Bash là shell mặc định của Linux  Người dùng có thể chuyển đổi giữa các shell  Hiển thị Shell : # echo $SHELL
  • 6. Sử dụng Shell  $ date --help  $ man ls  $ info bash
  • 7. Tiến trình (Process)  Tiến trình là một loại chương trình đảm nhiệm bởi PC.  # ls –lR  Tại sao cần tiến trình ?  # ls / -R | wc –l  # ls / -R | wc -l &
  • 8. Minh họa tiến trình  Xem tất cả các tiến trình  $ps  kill {PID}  $ ps –ag : Lấy thông tin từ các tiến trình đang chạy  $ kill 0 : tắt tất cả process ngoại trừ Shell đang dùng
  • 9. 9 Các lệnh quản lý tiến trình  Lệnh ps: Xem danh sách các tiến trình $ps $ps aux  Lệnh kill: Hủy tiến trình $kill 1653 $kill -s SIGTERM 1653  Lệnh top: Xem tần suất sử dụng tài nguyên của các tiến trình $top
  • 10. Chuyển đổi người dùng 10  Lệnh id : Hiển thị định danh người dùng hiện thời $id  Lệnh su : Chuyển đổi người dùng hiện thời $su $su user1 Liệt kê người dùng  Lệnh who: Liệt kê những người dùng đang đăng nhập  $ who
  • 11. 11 Tắt và khởi động lại máy  Lệnh shutdown: Tắt máy $shutdown -h now $shutdown -h -t5  Lệnh reboot: Khởi động lại máy $reboot $shutdown -r now Gắn các ổ đĩa • Lệnh mount: Gắn các ổ đĩa $mount /dev/cdrom /mnt/cdrom • Lệnh umount: Gỡ bỏ các ổ đĩa $umount /mnt/cdrom
  • 12. Phím điều khiển 12 Ctrl-C, Ctrl-: Kết thúc tiến trình hiện thời Ctrl-Z: Tạm dừng tiến trình hiện thời Ctrl-D: Kết thúc việc nhập liệu Ctrl-U: Xóa toàn bộ dòng lệnh bên trái con trỏ Ctrl-W: Xóa một từ bên trái con trỏ Ctrl-A: Di chuyển đến đầu dòng lệnh Ctrl-E: Di chuyển đến cuối dòng lệnh
  • 13. Phím điều khiển 13 Các phím di chuyển  Phím mũi tên lên, xuống: di chuyển trong lịch sử các lệnh đã được gõ  Phím mũi tên trái, phải: di chuyển trong dòng lệnh  Phím BACKSPACE: xóa ký tự bên trái con trỏ  Phím ENTER: thực thi lệnh • Lệnh history: Làm việc với lịch sử các lệnh đã được gõ $history $!2 !! : thực thi lệnh vừa được gõ !pw : thực thi lệnh đã được gõ bắt đầu bằng pw !$ : sử dụng đối số đã được gõ !* : sử dụng lại tất cả đối số của lệnh vừa được gõ
  • 14. Thao tác phím 14 Khả năng tự hoàn tất  Sử dụng phím TAB để hoàn tất lệnh hay tên tập tin, tên thư mục Một số ký tự đặc biệt  # đặt ở đầu dòng lệnh, đánh dấu dòng lệnh như là chú thích  ; ngăn cách các lệnh, cho phép đánh nhiều lệnh trên một dòng  & đặt ở cuối dòng lệnh, cho phép chạy lệnh ở chế độ nền (dấu nhắc sẽ lập tức hiện ra)  tiếp tục dòng lệnh ở dòng mới  | chuyển đầu ra của lệnh này thành đầu vào của lệnh kia  (;) Gộp các lệnh trong dấu () các lệnh được phân cách bởi “;”
  • 15. 15 Cú pháp lệnh  Cú pháp chung  Command [Options] [Argument]  Command = Tên lệnh  Options = Các tùy chọn của lệnh  Argument = Các đối số của lệnh
  • 16. Các ký hiệu đại diện nhóm tập tin 16  “*” đại diện cho một chuỗi (có thể rỗng) các ký tự bất kỳ  “?” đại diện cho một ký tự bất kỳ  “[ ]” đại diện cho một ký tự bất kỳ trong ngoặc vuông, có thể sử dụng dấu - để liệt kê một khoảng ký tự liền nhau
  • 17. Chuyển hướng Input <-> Output  Trong Linux có thể chuyển Output thành input  $ ls> filename  Có 3 loại chuyển hướng : > ; >>; <  > Redirector Symbol  $ ls > myfiles # ghi đè thông tin nếu đã tồn tại file  >> Redirector Symbol  Syntax: Linux-command >> filename  $ date >> myfiles # thêm thông tin vào phần cuối của file  < Redirector Symbol  Linux-command < filename  $ cat < myfiles # Nhận đầu vào lệnh vào tập tin
  • 18. Ống dẫn (pipe)  Ống dẫn là cách để kết nối output của một chương trình thành input của một chương trình khác mà không dùng file tạm  Ống dẫn thường dùng đễ thực thi nhiều hơn 1 câu lệnh trên cùng một dòng.  Cú pháp : command1 | command2
  • 19. Lập trình Shell  Chương trình shell là một loạt các câu lệnh.  Biến trong Shell :  Biến hệ thống (System variables )  Biến do người dùng định nghĩa (User defined variables UDV)
  • 20. Một vài biến hệ thống  Xem các biến trong hệ thống $set |more System Variable Meaning BASH=/bin/bash Our shell name BASH_VERSION='4.2.24(1)-release' Our shell version name COLUMNS=65 No. of columns for our screen HOME=/home/anhpham Our home directory PATH=/usr/lib/ccache Our path settings USER=anhpham User name who is currently login to this PC
  • 21. Ưu và nhược của Shells  Ưu điểm :  Ngôn ngữ diễn dịch : dễ dàng dò tìm và phát hiện lỗi; thay đổi chỉnh sửa script không cần phải biên dịch lại từ đầu.  Ngôn ngữ phù hợp với ứng dụng : ống nối, thay thế lệnh và các biến trong môi trường Unix  Cho phép kết nối các thành phần với các ngôn ngữ khác :  Input-Output dẫn xuất : các biến, lỗi, kết quả…
  • 22. Ưu và nhược của Shells  Nhược điểm :  Bắt nguồn từ Unix, ngôn ngữ lập trình dùng để lập trình, cú pháp của shell không dễ tiếp cận cho người mới bắt đầu.  Thêm hoặc bớt khoảng trắng trong câu lệnh sẽ gây lỗi cú pháp  bash sở hữu nhiều cú pháp để thao tác cùng một chức năng => đôi khi gây ra sự không tương thích với các phiên bản shell  Các ký tự đặc biệt dùng trong câu lệnh sẽ có ý nghĩa khác nhau trong từng hoàn cảnh khác nhau, gây khó khăn khi sử dụng
  • 23. Định nghĩa biến người dùng  Cú pháp : variablename = value  Ví dụ :  $ a=90 # this is ok  $ 90=a # Error, NOT Ok, giá trị phải ở bên phải  Định nghĩa biến ‘xe' có giá trị Bus  $ xe=Bus  Định nghĩa biến n có giá trị 10  $ n=10
  • 24. Quy tắc đặt tên biến ( UDV và System Variable)  Tên biến phải bắt đầu bằng 1 ký tự chữ cái hoặc (_), được tiếp bởi 1 ký tự chữ cái.  Biến hợp lệ :  HOME  SYSTEM_VERSION  no  Không dùng khoảng trắng trước và sau dấu “=”  $ no =10 #không hợp lệ  $ no= 10 #không hợp lệ  $ no = 10 #không hợp lệ  $ no=10 # OK  Biến phân biệt chữ hoa và chữ thường  $ No=11  $ NO=20  $ nO=2
  • 25. Quy tắc đặt tên biến ( UDV và System Variable)  Có thể đặt biến NULL như sau:  $ no=  $ no=“”  Không dùng ?,* etc để đặt tên biến  Để xuất giá trị biến, thêm vào $  $ no=10  $ echo $no
  • 26. Ví dụ minh hoạ  Định nghĩa biến x có giá trị 3 và xuất ra màn hình  $ x=3  $ echo $x  Định nghĩa biến k có giá trị xy  $ k=xyi  $ echo $k  In tổng của hai số  $ echo 6 + 3  $ expr 6 + 3  $ expr 6+3
  • 27. Viết Shell script  Ctrl + D  Để thực thi shell :  $ ./firstshell --.error  $ chmod +x firstshell  $ ./first $ cat > first shell # # My first shell script # clear echo “test"
  • 28. Làm thế nào sử dụng Shell  chmod để gán quyền execute cho script  Cú pháp : chmod +x shell-script-name chmod 777 shell-script-name  Thực thi script : Cú pháp : ./shell-program-name Ví dụ : $ ./first  Hoặc :  $ bash shell-program-name  $ /bin/sh shell-program-name
  • 29. Làm thế nào sử dụng Shell  $ /bin/sh /home/vinhth/shellscript  Thư mục /bin chứa các file thực thi. Có thể chạy script trực tiếp khi copy vào thư mục /bin  $ cp first ~/bin  $ first
  • 30. Một số lệnh liên quan đến lập trình Shell  echo [options] [string, variables...]  -n : không in ký tự xuống dòng.  -e : cho phép hiểu những ký tự theo sau dấu trong chuỗi  a : alert (tiếng chuông)  b : backspace  c : không xuống dòng  n : xuống dòng  r : về đầu dòng  t : tab  : dấu
  • 31. Một số lệnh liên quan đến lập trình Shell  Dấu nháy kép - “Double Quotes” : tất cả trong “” sẽ được bỏ qua (ngoại trừ và $)  Dấu nháy đơn – ‘Single quotes’ : tất cả trong ‘’ không thay đổi  Dấu nháy huyền- `Back quotes`: thực thi câu lệnh  $ echo “Today is date” ( Xuất chuỗi )  $ echo "Today is `date`". ( Xuất giá trị ngày)  Shell và số học :  $ expr 1 + 3 (CHÚ Ý KHOẢNG TRẮNG)  $ echo "expr 6 + 3”  $ expr 10 * 3 (PHÉP NHÂN : *)  $ $ echo "expr 6 + 3" # Xuất : expr 6 + 3  $ echo 'expr 6 + 3' # Xuất : expr 6 + 3
  • 32. Một số lệnh liên quan đến lập trình Shell  echo $(( 20 + 5 ))  x=5 echo $(( x++ )) echo $(( x++ ))  x=2 y=3 echo $(( x ** y ))
  • 33. Tính toán trên Shell  $ bc # tính toán trên Linux  5 – 2  7  5 / 2  5 > 2  0 # trả lời của hệ thống  5 > 12  5 == 10  5 != 2  5 == 5  12 < 2
  • 34. Xử lý câu lệnh  Thực hiện câu lệnh với 1 file không tồn tại  $ ls file_luu_tru  $ file_luu_tru : No such file or directory
  • 35. Sự cần thiết của tham số trong câu lệnh  $ rm {file-name}  $ ls -a /*
  • 36. Ví dụ minh họa  Lưu script Ctrl+d  $ chmod +x demo  $ ./demo Hello World  $ cp demo ~/bin  $ demo $ cat > demo #!/bin/sh # # Script that demos, command line # 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 :- $*"
  • 37. Trạng thái thoát  Mặc định sau khi kết thúc câu lệnh, hệ thống sẽ trả về 2 giá trị :  Lệnh thành công, giá trị =0  Lệnh không thành công, lỗi : giá trị >0  $ rm thu_muc  rm: cannot remove thu_muc': No such file or directory  $ echo $?  $ ls  $ echo $?
  • 38. CẤU TRÚC ĐIỀU KHIỂN hoangvinh@free.fr
  • 39. Cấu trúc : if..fi  $cat sho  $echo $  $ chmod +x sho  $./sho fs  $ ./sho foo if condition then command1 if condition is true or if exit status of condition is 0 (zero) ... ... fi $ cat > sho #!/bin/sh # #Script to print file # if cat $1 then echo -e "nnFile $1, found and successfully echoed" Fi
  • 40. Cấu trúc : if..fi  $ chmod +x trmif cat > trmif # # Script to test rm command and exist status # if rm $1 then echo "$1 file deleted" fi
  • 41. Cấu trúc : if..fi – kiểm tra biểu thức  $ chmod +x soduong  $ ./soduong 5  $./soduong -45  $./soduong  ./soduong: test: -gt: unary operator expected $ cat > soduong #!/bin/sh # # Script to see whether argument is positive # if test $1 -gt 0 then echo "$1 number is positive" fi
  • 42. Toán tử trong Shell Script
  • 43. Toán tử trong Shell Script  Toán tử trên chuỗi :  Trên file  Kết hợp
  • 44. Cấu trúc : if...else...fi if condition then command1 if condition is true or if exit status of condition is 0(zero) ... ... else command2 if condition is false or if exit status of condition is >0 (nonzero) ... ... fi $ cat > kiemtra #!/bin/sh # # kiem tra so duong hay am # if [ $# -eq 0 ] then echo "$0 : You must give/supply one integers" exit 1 fi if test $1 -gt 0 then echo "$1 number is positive" else echo "$1 number is negative" fi
  • 45. Cấu trúc if-then-else lồng nhau if condition then condition is zero (true - 0) execute all commands up to elif statement elif condition1 condition1 is zero (true - 0) execute all commands up to elif statement elif condition2 condition2 is zero (true - 0) execute all commands up to elif statement else None of the above condtion,condtion1,condtion2 are true (i.e. all of the above nonzero or false) execute all commands up to fi fi $ cat > etf #!/bin/sh # Script to test if..elif...else # if [ $1 -gt 0 ]; then echo "$1 is positive" elif [ $1 -lt 0 ] then echo "$1 is negative" elif [ $1 -eq 0 ] then echo "$1 is zero" else echo "$1 is not number, give number" fi
  • 46. Vòng lặp for for { variable name } in { list } do execute one for each item in the list until the list is not finished (And repeat all statement between do and done) done $ cat > testfor #!/bin/sh for i in 1 2 3 4 5 do echo “Xin chao $i times" done
  • 47. Vòng lặp for $ cat > mtable #!/bin/sh # kiem tra vong lap if [ $# -eq 0 ] then echo "Error – Cau lenh sai" echo "Syntax : $0 number" echo “Xuat ra bang cuu chuong" exit 1 fi n=$1 for i in 1 2 3 4 5 6 7 8 9 10 do echo "$n * $i = `expr $i * $n`" done
  • 48. Vòng lặp while while [ condition ] do command1 command2 command3 .. .... done
  • 49. $cat > nwhile #!/bin/sh #Script to test while statement # if [ $# -eq 0 ] then echo "Error – Cau lenh sai" echo "Syntax : $0 number" echo " In ra bang cuu chuong" exit 1 fi n=$1 i=1 while [ $i -le 10 ] do echo "$n * $i = `expr $i * $n`" i=`expr $i + 1` done
  • 50. Cấu trúc in case case $variable-name in pattern1) command ... .. command;; pattern2) command ... .. command;; patternN) command ... .. command;; *) command ... .. command;; esac
  • 51. $ cat > car # if no vehicle name is given # i.e. -z $1 is defined and it is NULL # if no command line arg if [ -z $1 ] then rental="*** Unknown vehicle ***" elif [ -n $1 ] then # otherwise make first arg as rental rental=$1 fi case $rental in “xehoi") echo "For $rental Rs.20 per k/m";; “xedap") echo "For $rental Rs.5 per k/m";; “honda") echo "For $rental 20 paisa per k/m";; *) echo "Sorry, I can not gat a $rental for you";; esac
  • 52. Lệnh break và continue #!/bin/sh a=10 while [ $a -lt 10 ] do echo $a a=`expr $a + 1` done $cat breaktest #!/bin/sh a=0 while [ $a -lt 10 ] do echo $a if [ $a -eq 5 ] then break fi a=`expr $a + 1` done
  • 53. Lệnh break và continue $ cat >continuetest #!/bin/sh NUMS="1 2 3 4 5 6 7" for NUM in $NUMS do Q=`expr $NUM % 2` if [ $Q -eq 0 ] then echo "Number is an even number!!" continue fi echo "Found odd number" done
  • 54. Câu lệnh read  Cú pháp : read varible1, varible2,...varibleN $ cat > sayhello # #Script to read your name from key-board # echo "Your first name please:" read fname echo "Hello $fname, Lets be friend!"
  • 56. - Chức năng: Cho phép ước lượng một biểu thức chứa biến - Ví dụ: foo=10 x=foo y=‘$’$x echo $y  Kết quả $foo Dùng lệnh evan foo=10 x=foo eval y=‘$’$x echo $y Kết quả : 10 Lệnh eval
  • 57. Lệnh exec - Chức năng: Dùng để gọi một lệnh bên ngoài khác. Thông thường lệnh exec sẽ gọi một shell phụ khác với shell mà script đang thực thi Lệnh exit n - Chức năng: Dùng để thoát ra khỏi shell đang gọi và trả về mã lỗi n - Mã lỗi ‘0’ được coi là thành công Lệnh exec và exit
  • 58. Lệnh printf - Chức năng: Tương tự như lệnh printf của thư viện C - Danh sách các ký tự đặc biệt dùng chung với dấu “”, gọi là chuỗi thoát
  • 59. Lệnh return - Chức năng: Trả về giá trị của hàm Lệnh set - Chức năng: Dùng để thiết lập giá trị cho các tham số môi trường như $1,$2,$3,v.v... Ngoài ra, lệnh này còn có chức năng loại bỏ những khoảng trắng không cân thiết và đặt nội dung của chuỗi truyền cho nó vào các biến tham số #set This is parameter #echo $1 This #echo $2 is Lệnh return và set
  • 60. Lệnh shift - Chức năng: Di chuyển nội dung các tham số môi trường $1, $2,$3,v.v... xuống một vị trí. (Do ta chỉ có tối đa 9 tham số $1..$9) Lệnh trap (tham khảo thêm) Lệnh shift, trap
  • 61. - Chức năng: Loại bỏ biến khỏi môi trường shell - Lệnh unset rất ít được sử dụng - Ví dụ: #!/bin/sh foo=“Hello World” echo $foo unset foo echo $foo - Kết quả chương trình sẽ in ra chuỗi rỗng (do lúc này biến foo không tồn tại nữa) Lệnh unset
  • 62. Lệnh đi kèm /dev/null  Cú pháp : command > /dev/null : gửi tới những output không muốn xuất hiện  $ ls > /dev/null
  • 63. Biến cục bộ và toàn cục  Biến cục bộ (local variables) là các biến ta sử dụng. Nếu tải bản copy của shell $/bin/bash, shell mới sẽ bõ qua tất cả các biến cũ  Ví dụ :  $x=5  $echo $x  5  $/bin/bash  $echo $x  NOTE:-Empty line printed  $x=7  $exit  $echo $x
  • 64. Từ khóa export  Có thể copy biến shell cũ tới shell mới, biến như vậy gọi là biến toàn cục.  Cú pháp : export variable1, variable2,.....variableN  $ xe=Bus  $ echo $xe  Bus  $ export xe  $ /bin/bash  $ echo $xe  Bus  $ exit  $ echo $xe
  • 65. Điều kiện thực th: && và ||  Toán tử điều khiển :  && : AND  Cú pháp command1 && command2 : command1 được thực thi, iff command1 trả về giá trị thoát 0.  || : OR  Cú pháp : command1 || command2 : command2 được thực thi iff command1 trả về giá trị thoát non-zero Hoặc : command1 && comamnd2 if exist status is zero || command3 if exit status is non-zero
  • 66. Input – Output chuyển hướng  $ cat > myft  This is my file # ctrl D  $ cal  $ cal >myfile #lưu  $ cat >number  $sort <number
  • 67. Input – Output chuyển hướng $cat >demosc #!/bin/sh if [ $# -ne 2 ] then echo "Error : Number are not supplied" echo "Usage : $0 number1 number2" exit 1 fi ans=`expr $1 + $2` echo "Sum is $ans"
  • 68. Hàm  Hàm có vai trò quan trọng trong Shell function-name ( ) { command1 command2 ..... ... commandN return } $ SayHello() { echo "Hello $LOGNAME !” return }
  • 69. Dò lỗi – debug trong shell - Do script là lệnh văn bản được shell thông dịch nên việc dò lỗi không khó như các chương trình biên dịch nhị phân - Quá trình dò lỗi thì shell sẽ in ra số thứ tự của dòng gây lỗi. Ta cũng có thể thêm vào lệnh echo để in ra nội dung của các biến có khả năng gây lỗi cho chương trình  Có thể dùng set để đặt một số tùy chọn cho shell hoặc đặt thêm tham số khi gọi shell thực thi script $ bash -x script-name $ bash -x domains.sh
  • 70. Một số tùy chọn khi dùng lệnh set 70
  • 71. 71 Xử lý chuỗi 1. Khởi tạo một chuỗi string=abcDefghu1234EDstuV 2. Lấy độ dài một chuỗi $ echo {#string} echo `expr length $string` echo `expr "$string" : ".*"` 3. Định vị một ký tự trong string $ echo `expr index "$string" c ` $echo `expr index "$string" E`
  • 72. 72 stringZ=abcABC123ABCabc 4.Lọc N ký tự đầu tiên của chuỗi $echo ${stringZ:0} echo ${stringZ:7:3} # lấy từ vị trí thứ 7, 3 ký tự 5.Lọc các ký tự từ đầu chuỗi trừ N ký tự cuối cùng ${string: -N} echo ${stringZ:-4} echo ${stringZ:(-4)} 6.Lọc N ký tự bắt đầu từ ký tự số M echo `expr substr $string M N ` 7.Lọc các ký tự từ a* đến u (đầu tiên) $ echo ${stringZ#a*C} # 123ABCabc $echo ${stringZ#a*3} Xử lý chuỗi
  • 73. 73 stringZ=abcABC123ABCabc $echo ${stringZ#*123} ${stringZ%kytu* kytu} #abcDef1234ED ${stringZ%substr* kytu} #abcDefghu1 ${stringZ%%kytu* kytu} #abcDefgh ${string/substr/replacement} #xyzDefghu1234EdstuV $ echo ${stringZ% *} : xóa từ bên phải Xử lý chuỗi
  • 74. 74 12. Loc N ký tự kể từ ký tự thứ M vd : N=3 , M=4 read N echo `expr substr $string $M $N ` # Def 13.Lọc các ký tự kể từ chuỗi con “substr” string1=xyzabcd123xyzthung {string1%%substr*} #xyz 14. Lọc N ký tự đầu tiên ${string1:N} #N=3:abcd123xyzthung ${string1#kytu*kytu} #abcd123xyzthung 15.Lọc các ký tự kể từ substr trở về trươc ${string1##*substr}#thung Xử lý chuỗi
  • 75. 75 Xử lý chuỗi trong shell #!/bin/bash string=abcDefghu1234EDstuV echo ${#string} 19 echo `expr lengt#h $string` #19 echo `expr index "$string" c ` #3 echo `expr index "$string" E ` #14 echo ${string:2} # cDefghEDstuVF echo ${string: -3} # tuV echo `expr substr $string 3 5 `# cDefg echo ${string#a*u} # 1234EDstuV
  • 76. 76 Xử lý chuỗi trong script echo ${string#*123} #4EDstuV echo ${string##a*u} # V echo ${string%s*V} #abcDefghu1234ED echo ${string%234*V} #abcDefghu1 echo ${string%%u*V} #abcDefgh echo ${string/abc/xyz} #xyzDefghu1234EDstuV read N echo `expr substr $string 3 $N `
  • 77. 77 Xử lý mảng  array[xx] 1.Khai báo mảng : declare –a array 2. Lấy giá trị mảng : ${array[xx]} ${array[@]} hoặc ${array[*]} : lâý tât́ cả phân tử của mảng ${#array[@]} hoăc̣${#array[*]} : tông số phâǹ tử của mảng Ví dụ : array[5]=`expr ${array[11]} + ${array[13]}` Một cách khác array=( zero one two three four ) -> array[0]=zero ; array[4]=four
  • 78. 78  Cách khác : array=( [xx]=XXX [yy]=YYY ...) array=([17]=seventeen [21]=twenty- one) Ví dụ : array=( zero one two three four five ) echo ${array[0]} # zero echo ${array:0} # zero echo ${array:1} # ero : lâý từ vị trí số 1 cuả phân tử thư ́ nhất Xử lý mảng
  • 79. 79 arrayZ=( one two three four five five )  echo ${#array[0]} # 3 : chiều daì cuả phần tử thứ nhất echo ${#array} # 4 echo ${#array[1]} # 3 : chiều daì cuả phần tử thứ 2 echo ${#array[*]} # 6 : số phần tử của mảng echo ${#array[@]} # 6 : số phâǹ tử của mảng. Ví dụ : array2=( [0]="first element" [1]="second element" [3]="fourth element" ) echo ${array2[0]} # first element echo ${array2[1]} # second element echo ${array2[2]} # không khơỉtaọnên có giátrị null echo ${array2[3]} # fourth element
  • 80. 80 Xử lý mảng  Ví dụ : arrayZ=( one two three four five five ) echo ${arrayZ[@]:0} # one two three four five five echo ${arrayZ[@]:1} # two three four five five : lâý từ̉ phân tử thứ 1
  • 81. 81 echo ${arrayZ[@] 2} # two three : lâý phân tử 1 đến 2  Khai báo mảng rỗng array0=( first second third ) array1=( ' ' ) # "array1" có 1 phần tử rôñg. array2=( ) # mảng rỗng 
  • 82. 82  Thêm phân tử vào mảng array0=( "${array0[@]}" "new1" ) # ${array0[@]} là toan bộ mang cũ, new1 là phần tử mới array1=( "${array1[@]}" "new1" ) array2=( "${array2[@]}" "new1" ) hoặc array0[${#array0[*]}]="new2" array1[${#array1[*]}]="new2" array2[${#array2[*]}]="new2"
  • 83. 83  Sao chép mảng array2=( "${array1[@]}" ) hoặc array2="${array1[@]}" 2. Xóa mảng : unset Ví dụ : unset array[1] : xoá phân tử thứ 2 của mảng array unset array : xóa tòan bộ mảng
  • 84. #!/bin/bash while : do clear echo "--------------------------------------- " echo " Main Menu" echo "--------------------------------------- " echo "[1] Show today date/time" echo "[2] Show all files in current directory" Tạo menu tương tać vơí ngươì dùng.
  • 85. 85 echo "[3] Show calendar" echo "[4] Exit/Stop" echo "=======================" echo -n "Enter your choice [1-4]: " read choice case $choice in 1) echo "Today is `date` " echo "Press Enter key to continue ..."; read;; 2) echo "Files in $PWD"; ls -l echo "Press Enter key to continue..."; read;; 3) cal ; echo "Press Enter key to continue..."; read;; 4) exit 0;; *) echo "Please choice 1,2,3,4. Press Enter key to continue..."; read;; esac done Tạo menu tương tać vơí ngươì dùng.