1
Hệ điều hành Linux
Lê Đình Long
2
Chương 7
BASH shell
3
Nội dung
Linux Fundamentals
Gọi thực thi bash shell
Biến shell
Gán tắt (alias) lệnh
Tùy biến môi trường
Điều khiển tác vụ (job)
Lập trình shell
Tác vụ tự động
HCMUNS
4
Gọi thực thi bash shell
Linux Fundamentals
bash [options] [file]
-i: interactive
-l: login shell
sh: POSIX mode
Các file đặc biệt liên quan
●
/etc/profile – file khởi động cho tất cả user, thực thi đối
với login shell
●
~/.bash_profile – file khởi động cho từng user, thực thi
đối với login shell
●
~/.bashrc – file khởi động cho từng interactive shell
không phải là login shell
●
~/.bash_logout – file dọn dẹp khi thoát khỏi login shell
HCMUNS
5
Biến shell
Linux Fundamentals
Dùng trong lập trình shell và điều khiển môi
trường thực thi (environment)
Gán giá trị cho biến: var_name=value
Truy xuất giá trị của biến: $var_name
$ foo=”xin chao”
$ echo $foo
set – liệt kê các biến shell đã được định nghĩa
unset – hủy biến shell
export – export biến cho môi trường thực thi
của các lệnh sau đó
HCMUNS
6
Biến môi trường
Linux Fundamentals
Điều khiển môi trường thực thi lệnh
Một số biến môi trường thông dụng:
●
HOME thư mục home
●
SHELL chương trình shell hiện tại
●
PATH đường dẫn để tìm các file thực thi
●
USER tên user login
●
TERM kiểu terminal hiện tại
●
DISPLAY khai báo hiển thị cho X-Window
●
PS1 dấu nhắc dòng lệnh
●
LANG ngôn ngữ hiện tại
HCMUNS
7
Gán tắt lệnh
Linux Fundamentals
Thay thế một chuỗi dài bằng một từ ngắn
Tạo các lệnh với tuỳ chọn đơn giản, ngắn gọn,
hữu dụng
alias tạo hoặc liệt kê các gán tắt (alias)
unalias loại bỏ một gán tắt
$ alias cp='cp -i'
$ alias ll='ls -l –-color=tty'
$ alias la='ls -la -–color=tty'
$ unalias la
$ alias
HCMUNS
8
Tuỳ biến môi trường
Linux Fundamentals
Thiết lập các biến môi trường
Lưu trong file ~/.bash_profile, ~/.bashrc để sử
dụng lại sau này
$ export PATH=$PATH:/usr/local/bin:$HOME/bin:.
$ source ~/.bash_profile
$ cat ~/.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:/usr/local/bin:$HOME/bin:.
export PATH
HCMUNS
9
Điều khiển tác vụ
Linux Fundamentals
Một tác vụ (job) là một tiến trình đang thực thi
Lệnh điều khiển tác vụ
^C thoát ngang
^Z tạm ngừng
jobs liệt kê các tác vụ đang thực thi
fg tiếp tục tác vụ ở foreground
bg,& tiếp tục tác vụ ở background
HCMUNS
1
0
Ví dụ về điều khiển tác vụ
Linux Fundamentals
$ cat
^Z
[1]+ Stopped cat
$ tail & (chạy ở chế độ background)
[2] 2038
$ jobs
[1]- Stopped cat
[2]+ Stopped tail
$ bg %1 (tiếp tục job [1] ở background)
$ fg
$ fg %% (tiếp tục job cuối cùng ở foreground)
$ fg %1 (tiếp tục job [1] ở foreground)
$ kill %2 (kill job [2])
HCMUNS
1
1
Lập trình shell
Linux Fundamentals
Shell script
Biến
Biểu thức số học
Biểu thức so sánh
Cấu trúc điều khiển
Hàm
HCMUNS
1
2
Shell script
Linux Fundamentals
File văn bản text chứa các lệnh (lệnh shell và
chương trình)
Được thông dịch bởi shell
Có thể được gọi trong chính shell script khác
Tham số được truyền trên dòng lệnh
HCMUNS
1
3
Chương trình “Hello”
Linux Fundamentals
$ cat > hello.sh
#!/bin/bash
# This is a comment: simple hello shell script
echo "Enter your name:"
read name
echo "Hello $name, have a nice day!"
^D
$ ./hello.sh
bash: ./hello.sh: Permission denied
$ chmod +x hello.sh
$ ./hello.sh
Enter your name:
Linux Fan
Hello Linux Fan, have a nice day!
HCMUNS
1
4
Biến
Linux Fundamentals
Biến môi trường
Biến nội (built-in) của bash
Biến do người dùng định nghĩa
Biến đơn có thể lưu giá trị số nguyên hoặc ký tự
(không khai báo kiểu)
Chuỗi ký tự phải được bao bằng dấu nháy đơn
hoặc nháy kép
HCMUNS
1
5
Tham số vị trí
Linux Fundamentals
Tham số được truy xuất thông qua vị trí của nó
Tham số vị trí có thể được gán lại bằng lệnh “set”
Các biến nội thao tác với tham số vị trí:
●
$#số tham số được truyền
●
$* tất cả các tham số
●
$n tham số thứ n
$ ./myscript source dest
$0 -> ./myscript
$1 -> source
$2 -> dest
HCMUNS
1
6
Một số biến đặc biệt
Linux Fundamentals
$0 tên của shell script/chương trình
$$ PID của shell hiện tại
$? mã trả về (exit code) của lệnh foreground
ngay trước đó
$! mã trả về (exit code) của lệnh background
ngay trước đó
HCMUNS
1
7
Thay thế lệnh
Linux Fundamentals
Thực thi lệnh và lấy kết quả xuất của lệnh đặt tại
vị trí hiện tại
Dùng nháy ngược (back-quote “` `”) hoặc $( )
$ date
Mon Oct 14 10:48:04 ICT 2003
$ today=$(date)
$ echo $today
Mon Oct 14 10:50:04 ICT 2003
$ ls -l `which tr`
HCMUNS
1
8
Biểu thức số học
Linux Fundamentals
Dùng let, expr hoặc $(( )) để gán trị
Phép toán số học: ++, , +, -, *, /, %, ==, !=,
>, <, &&, ||,
let “a = 1 + 1” (a = 2)
a=`expr $a “*” 6` (a = 12)
a=$(($a “/” 4)) (a = 3)
let “area = $len * $width”
let “percent = $num / 100”
let “remain = $n % $d”
HCMUNS
1
9
Biểu thức điều kiện
Linux Fundamentals
[ expression ]
test expression
So sánh chuỗi: =, !=, -n, -z
So sánh số: -eq, -ne, -lt, -le, -gt, -ge
Kiểm tra file: -d, -f, -x, -e
Toán tử luận lý: !, -o, -a
[ string1 = string2 ]
[ $num -lt 10 ]
test ! -d mydir && mkdir mydir
[ -f myfile -a -x myfile ] && ./myfile
HCMUNS
2
0
Phát biểu điều kiện
Linux Fundamentals
Phát biểu IF
if [ exp ]; then
statements;
elif [ expr ]; then
statements;
else
statements;
fi
HCMUNS
Ví dụ
if [ “$1” = “” ]; then
echo “Enter value:”
read num
else
let “num = $1”
fi
2
1
Phát biểu điều kiện(tt)
Linux Fundamentals
Phát biểu CASE
case $var in
val1)
statements
;;
val2)
statements
;;
*)
statements
;;
esac
HCMUNS
Ví dụ
case $1 in
1)
echo “Mot”;;
2)
echo “Hai”;;
*)
echo “So khac”;;
esac
2
2
Phát biểu lặp
Linux Fundamentals
Phát biểu FOR
Dạng 1: for var [in list]; do
statements;
done
Dạng 2: for ((exp1; exp2; exp3)); do
statements;
done
Ví dụ
let “sum = 0”
for num in 1 3 5; do
let “sum = $sum + $num”
done
echo $sum
HCMUNS
2
3
Phát biểu lặp(tt)
Linux Fundamentals
Phát biểu WHILE
while expression; do
statements;
done
Ví dụ
let “num = 1”
while [ $num -lt 10 ]; do
echo $num
let “num = $num + 2”
done
HCMUNS
2
4
Một số phát biểu đặc biệt
Linux Fundamentals
BREAK – thoát khỏi vòng lặp
CONTINUE – bỏ qua phần còn lại của vòng lặp
EXIT – thoát khỏi shell script
RETURN – trở về từ hàm hoặc shell script
if [ $# -lt 2 ]; then
echo “Usage: `basename $0` source dest”
echo
exit 1
fi
HCMUNS
2
5
Hàm
Linux Fundamentals
Khai báo hàm
func_name() {
statements;
}
Gọi hàm
func_name param1 param2
Truy xuất các tham số
$1, $2,
HCMUNS