SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
Lập trình shell

Làm thế nào để viết shell script:
1. Sử dụng bất kỳ trình soạn thảo nào như: vi, mcedit...
2. Sau khi viết shell script thì thiết lập quyền thực thi cho nó theo cấu trúc:
        chmod permission your-script-name
Ví dụ:
$ chmod +x your-script-name
$ chmod 755 your-script-name
3. Thực thi script bằng cấu trúc:
        bash your-script-name
        sh your-script-name
        ./your-script-name
Ví dụ:
$ bash bar
$ sh bar
$ ./bar
Ghi chú: Cấu trúc ./ có nghĩa là thư mục hiện hành, nhưng . (dot) nghĩa là thực thi lệnh trong shell với
shell hiện hành. Cấu trúc dot như sau:
. shell_script
Ví dụ:
$ . foo
Shell script sau sẽ in "Knowledge is Power" trên màn hình:
$ vi first
#
# My first shell script
#
clear
echo "Knowledge is Power"
Sau khi lưu file, thay đổi quyền (chmod 755 first) => chạy script này như sau:
$ ./first
Ghi chú: Shell script file có bằng phần mở rộng là .sh để dễ dàng xác định đó là shell script.


Các biến trong Shell:
Để xử lý dữ liệu/thông tin, dữ liệu phải được giữ trong bộ nhớ RAM của máy tính. RAM được chia thành
nhiều vị trí nhỏ, và mỗi vị trí có một số duy nhất được gọi là địa chỉ bộ nhớ - được sử dụng để lưu dữ liệu.
Bạn có thể gán tên cho vùng nhớ này => gọi là biến bộ nhớ hoặc biến.

Trong Linux (Shell), có hai loại biến:
1. Biến hệ thống - được tạo và duy trì bởi chính Linux. Loại biến này được định nghĩa bằng các mẫu tự
hoa.
2. Biến do người dùng định nghĩa (UDV - User Defined variables) - được tạo và duy trì bởi người dùng.
Loại biến này được định nghĩa bằng các mẫu tự thường.

Bạn có thể xem danh sách các biến hệ thống bằng lệnh set hoặc env. Một vài biến hệ thống quan trọng:
BASH=/bin/bash - tên shell.
BASH_VERSION=1.14.7(1) - phiên bản của shell.
COLUMNS=80 - số cột cho màn hình.
HOME=/home/vivek - thư mục nhà.
LINES=25 - số dòng của màn hình.
LOGNAME=students - tên đăng nhập của người dùng.
OSTYPE=Linux - Loại hệ điều hành.
PATH=/usr/bin:/sbin:/bin:/usr/sbin - Thiết lập đường dẫn.
PS1=[¥u@¥h ¥W]¥$ - thiết lập prompt.
PWD=/home/students/Common - thư mục hiện hành.
SHELL=/bin/bash - tên shell.
USERNAME=vivek - user nào hiện đang đăng nhập vào PC.
Bạn có thể in ra bất kỳ biến môi trường nào như sau:
$ echo $USERNAME
$ echo $HOME

Làm thế nào để định nghĩa UDV:
Sử dụng cấu trúc sau:
variable name=value - value được gán cho 'variable name' và value phải nằm bên phải dấu =
Ví dụ:
$ no=10
$ vech=Bus

Nguyên tắc đặt tên biến (cả UDV và biến hệ thống):
1. Biến phải bắt đầu bằng ký tự alphanumeric hoặc underscore (_), theo sau bởi một hoặc nhiều ký tự
alphanumeric.
Ví dụ:
Các biến hợp lệ: HOME, SYSTEM_VERSION, vech, no…
2. Không có khoảng trắng giữa hai bên dấu bằng khi gán giá trị biến.
Ví dụ:
Các khai báo sau sẽ có lỗi:
$ no =10
$ no= 10
$ no = 10
3. Phân biệt chữ hoa và thường.
Ví dụ:
Các biến sau sẽ khác nhau:
$ no=10
$ No=11
$ NO=20
$ nO=2
4. Bạn có thể định nghĩa biến NULL như sau:
$ vech=
$ vech=""
Khi in ra các biến NULL này, thì không có gì trên màn hình bởi vì chúng không có giá trị.
5. Không sử dụng ?, *...để đặt tên cho biến.
In và truy cập giá trị của UDV:
$variablename
hoặc echo $variablename


Tính toán trong Shell:
Sử dụng các phép toán số sau theo cấu trúc sau:
expr op1 math-operator op2
Ví dụ:
$ expr 1 + 3
$ expr 2 - 1
$ expr 10 / 2
$ expr 20 % 3
$ expr 10 ¥* 3
$ echo `expr 6 + 3`


Trích dẫn (quote):
Có 3 loại quote:
1. " (double quote): Bất kỳ thứ gì trong đây đều bị hủy ý nghĩa của ký tự đó (trừ ¥ và $)
2. ' (single quote): Duy trì không thay đổi.
3. ` (back quote): thực thi lệnh.
Ví dụ:
$ echo "Today is date" => in ra Today is date
$ echo "Today is `date`". => in ra Today is Tue Jan....


Trạng thái kết thúc (exit status):
Mặc định trong Linux nếu lệnh/shell script được thực thi, nó sẽ trả về hai loại giá trị - được sử dụng để
xem lệnh/shell script được thực thi thành công hay không.
1. Nếu trả về giá trị là 0 - thành công.
2. Không phải 0, lệnh không thành công hoặc có một vài lỗi khi thực thi lệnh/shell script.
=> giá trị này gọi exit status.
Ví dụ:
unknow1file không tồn tại trong đĩa cứng thì lệnh “rm unknow1file” sẽ in ra lỗi như sau:
rm: cannot remove `unkowm1file': No such file or directory.
Và sau đó nếu bạn gõ lệnh $ echo $? thì nó sẽ in ra giá trị nonzero để chỉ có lỗi.
Câu lệnh read:
Sử dụng để nhận dữ liệu từ bàn phím và lưu vào biến.
Cấu trúc:
read variable1, variable2,...variableN
Ví dụ:
Script sau sẽ hỏi tên người dùng và chờ họ nhập vào từ bàn phím. Sau khi người dùng nhập tên và nhấn
Enter thì tên sẽ được lưu trong biến fname.
$ vi sayH
#
#Script to read your name from key-board
#
echo "Your first name please:"
read fname
echo "Hello $fname, Lets be friend!"
Chạy nó như sau:
$ chmod 755 sayH
$ ./sayH
Your first name please: vivek
Hello vivek, Lets be friend!


Wild cards:
1. *: phù hợp với bất kỳ chuỗi hoặc nhóm ký tự nào.
Ví dụ:
$ ls * - hiển thị tất cả các file.
$ ls a* - hiển thị tất cả các file mà tên của nó bắt đầu bằng mẫu tự 'a'.
$ ls *.c - hiển thị tất cả các file có bằng mở rộng là .c

2. ?: phù hợp bất kỳ 1 ký tự nào.
Ví dụ:
$ ls ? - hiển thị tất cả các file mà tên của nó có chiều dài 1 ký tự.
$ ls fo? - hiển thị tất cả các file mà tên của nó có 3 ký tự và tên file bắt đầu bằng fo.

3. [...]: phù hợp bất kỳ 1 trong các ký tự trong dấu ngoặc.
Ví dụ:
$ ls [abc]* - thể hiện tất cả các file bắt đầu với mẫu tự a, b, c.

Ghi chú:
[..-..]: Một cặp các ký tự được phân chia bởi dấu trừ để ghi nhận một dãy.
Ví dụ:
$ ls /bin/[a-c]* - hiển thị tất cả các file bắt đầu với mẫu tự a, b, c.
Nếu ký tự đầu tiên theo sau [ là ! hoặc ^, thì bất kỳ ký tự nào không phù hợp sẽ được hiển thị.
$ ls /bin/[!a-o]
$ ls /bin/[^a-o]
=> sẽ hiển thị tất cả các file trong thư mục bin mà ký tự đầu tiên không phải là a, b, c...o.


  hiều lệnh trên một dòng lệnh:
command1;command2
Ví dụ:
$ date;who - sẽ in ra ngày hiện tại theo sau là tên người dùng đăng nhập hiện tại.


Dòng lệnh:
Khi thực thi lệnh sau (giả sử file "grate_stories_of" không tồn tại trên hệ thống).
$ ls grate_stories_of - sẽ in ra thông báo “grate_stories_of: No such file or directory”
ls là tên của lệnh và shell sẽ thực thi lệnh này.
Từ đầu tiên của dòng lệnh là ls - tên của lệnh cần thực thi.
Phần còn lại là các tham số của lệnh này.
Ví dụ:
$ tail +10 myf - tên lệnh là tail và tham số là +10 và myf.
Ghi chú: $# nắm giữ các tham số của dòng lệnh. $* hoặc $@ tham chiếu đến các tham số được chuyển
đến script.


Chuyển hướng:
Hầu hết các lệnh đều kết xuất ra màn hình hoặc nhận tham số từ bàn phím. Nhưng trong Linux thì có thể
gửi kết xuất đến hoặc đọc dữ liệu từ tập tin.
Ví dụ:
$ ls cho kết xuất ra màn hình, để gửi kết xuất ra tập tin thì sử dụng lệnh sau:
$ ls > filename
1) Ký hiệu >:
command > filename - kết xuất kết quả của lệnh ra file. Nếu như file tồn tại, nó sẽ ghi đè lên, ngược lại
file mới sẽ được tạo.
2) Ký hiệu >>:
command >> filename - kết xuất kết quả đến phần cuối của file. Nếu như file tồn tại, nó sẽ được mở và
thông tin mới được ghi vào cuối file, không sợ mất dữ liệu/thông tin trước. Và nếu file không tồn tại, thì
file mới được tạo.
Ví dụ:
$date >> myfiles
3) Ký hiệu <:
command < filename - nhận dữ liệu từ file thay vì bàn phím.
Ví dụ:
$ cat < myfiles
$ sort < sname > sorted_names - lệnh sort lấy dữ liệu từ file tên là sname và kết xuất kết quả ra file tên là
sorted_names.
Pipes:
Định nghĩa: Một pipe là một nơi lưu tạm kết xuất của một lệnh và sau đó chuyển vào input của lệnh thứ
hai. Pipe được sử dụng để chạy nhiều hơn 2 lệnh trên cùng một dòng lệnh.


Filter:
Nếu một lệnh chấp nhận input từ stdin và xuất nó ra stdout thì được gọi là filter. Một filter thực thi một
vài xử lý trên input và cho ra ouput. Ví dụ: Giả sử bạn có một file được gọi là 'hotel.txt' với 100 dòng dữ
liệu. Và bạn chỉ muốn in ra dòng từ 20 đến 30 và lưu kết qủa này vào file gọi là 'hlist' thì sử dụng lệnh
sau:
$ tail +20 < hotel.txt | head -n30 >hlist1
=> Ở đây lệnh head là một filter nhận input từ lệnh tail (lệnh tail bắt đầu chọn từ dòng 20 trong file
'hotel.txt'. Và chuyển các dòng này làm input cho head, cuối cùng chuyển ouput đến file 'hlist'.)


Process:
Tiến trình là một chương trình (lệnh) để thực thi một công việc xác định. Trong Linux khi bạn khởi tạo
một tiến trình, nó sẽ cho tiến trình đó một con số gọi là PIP hoặc process-id, PID khởi đầu từ 0 đến
65535.
Ví dụ:
$ls -lR - lệnh ls sẽ liệt kê các file trong thư mục hoặc tất cả thư mục con trong thư mục hiện hành - nó là
một tiến trình.


Tại sao có tiến trình:
Vì Linux là hệ điều hành đa người dùng, đa nhiệm. Nghĩa là bạn có thể chạy nhiều hơn 2 tiến trình đồng
thời nếu bạn muốn.
Ví dụ:
Để tìm nhiều file mà bạn có trên hệ thống, bạn có thể thực hiện lệnh sau:
$ ls / -R | wc -l
=> lệnh này sẽ mất nhiều thời gian để tìm kiếm tất cả các file trên hệ thống, vì thế bạn có thể chạy lệnh
này ở background:
$ ls / -R | wc -l &
Do đó một thể hiện của lệnh đang chạy được gọi là process và một con số được in ra bởi shell gọi là
process-id (PID), PID này có thể sử dụng để xác định tiến trình đang chạy.
Các lệnh liên quan đến process:
• ps - xem tiến trình đang chạy.
• kill - dừng bất kỳ tiến trình nào bởi PID của nó.
• killall- dừng tiến trình bởi tên của nó.
• ps -ag - lấy thông tin về tất cả các tiến trình đang chạy.
• kill 0 - dừng tất cả các tiến trình trừ shell của bạn.
• command & - chạy lệnh ở background.
• ps aux - hiển thị chủ sở hữu của các tiến trình cùng với các tiến trình đó.
• ps ax | grep process-U-want-to-see - xem từng tiến trình đang chạy hoặc không chạy.
• top - xem tiến trình đang chạy và các thông tin khác như bộ nhớ, CPU usage cùng với thời gian thực.
• pstree - hiển thị cây các tiến trình.
(Nguồn từ http://www.freeos.com/guides/lsst/)

Contenu connexe

Tendances

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 shellsThuyet Nguyen
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTMasterCode.vn
 
Cac lenh linux_co_ban
Cac lenh linux_co_banCac lenh linux_co_ban
Cac lenh linux_co_banNguyen Anh
 
Th linux
Th linuxTh linux
Th linuxthocntt
 
Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512lekytho
 
209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file ini209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file initraducanh
 
Quản lý file, thư mục trong linux
Quản lý file, thư mục trong linuxQuản lý file, thư mục trong linux
Quản lý file, thư mục trong linuxlaonap166
 
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTBài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTMasterCode.vn
 
linux_huongdanthuchanh
linux_huongdanthuchanhlinux_huongdanthuchanh
linux_huongdanthuchanhhuynhngochao
 

Tendances (19)

Thuc hanh 13
Thuc hanh  13Thuc hanh  13
Thuc hanh 13
 
Linux security
Linux securityLinux security
Linux security
 
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
 
8 filter
8 filter8 filter
8 filter
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
 
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
 
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
 
Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512
 
209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file ini209 008 ky thuat truy xuat file ini
209 008 ky thuat truy xuat file ini
 
Web301 slide 3
Web301   slide 3Web301   slide 3
Web301 slide 3
 
Cấu trúc cơ bản
Cấu trúc cơ bảnCấu trúc cơ bản
Cấu trúc cơ bản
 
Quản lý file, thư mục trong linux
Quản lý file, thư mục trong linuxQuản lý file, thư mục trong linux
Quản lý file, thư mục trong linux
 
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTBài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
 
Php Csdlweb06
Php Csdlweb06Php Csdlweb06
Php Csdlweb06
 
Bai 7+8 tin 11
Bai 7+8 tin 11Bai 7+8 tin 11
Bai 7+8 tin 11
 
File
FileFile
File
 
P2
P2P2
P2
 
linux_huongdanthuchanh
linux_huongdanthuchanhlinux_huongdanthuchanh
linux_huongdanthuchanh
 

En vedette

Enhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopedia
Enhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopediaEnhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopedia
Enhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopediaHoàng Hải Nguyễn
 
157393478 solfege-dandelot
157393478 solfege-dandelot157393478 solfege-dandelot
157393478 solfege-dandelotMariana Domenico
 
5 lectii-in-15-ani-de-esecuri (1)
5 lectii-in-15-ani-de-esecuri (1)5 lectii-in-15-ani-de-esecuri (1)
5 lectii-in-15-ani-de-esecuri (1)Gurzun Mihaela
 
A dictionary of_thoughts_1000063292
A dictionary of_thoughts_1000063292A dictionary of_thoughts_1000063292
A dictionary of_thoughts_1000063292Gurzun Mihaela
 
Revista epifania, nr.33, 27mai 2015 (1)
Revista epifania, nr.33, 27mai 2015 (1)Revista epifania, nr.33, 27mai 2015 (1)
Revista epifania, nr.33, 27mai 2015 (1)Gurzun Mihaela
 
Nicolae steinhardtjurnalulfericirii
Nicolae steinhardtjurnalulfericiriiNicolae steinhardtjurnalulfericirii
Nicolae steinhardtjurnalulfericiriiGurzun Mihaela
 

En vedette (9)

Enhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopedia
Enhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopediaEnhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopedia
Enhanced Interior Gateway Routing Protocol - Wikipedia, the free encyclopedia
 
157393478 solfege-dandelot
157393478 solfege-dandelot157393478 solfege-dandelot
157393478 solfege-dandelot
 
5 lectii-in-15-ani-de-esecuri (1)
5 lectii-in-15-ani-de-esecuri (1)5 lectii-in-15-ani-de-esecuri (1)
5 lectii-in-15-ani-de-esecuri (1)
 
A dictionary of_thoughts_1000063292
A dictionary of_thoughts_1000063292A dictionary of_thoughts_1000063292
A dictionary of_thoughts_1000063292
 
Revista epifania, nr.33, 27mai 2015 (1)
Revista epifania, nr.33, 27mai 2015 (1)Revista epifania, nr.33, 27mai 2015 (1)
Revista epifania, nr.33, 27mai 2015 (1)
 
Nicolae steinhardtjurnalulfericirii
Nicolae steinhardtjurnalulfericiriiNicolae steinhardtjurnalulfericirii
Nicolae steinhardtjurnalulfericirii
 
Arta florala
Arta floralaArta florala
Arta florala
 
Khao sat QL ban va mua hang
Khao sat QL ban va mua hangKhao sat QL ban va mua hang
Khao sat QL ban va mua hang
 
notes2
notes2notes2
notes2
 

Similaire à ShellProgramming

Lập trình Shell 1.pdf
Lập trình Shell 1.pdfLập trình Shell 1.pdf
Lập trình Shell 1.pdfCuongLy23
 
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
 
Tóm tắt lệnh Ubuntu
Tóm tắt lệnh UbuntuTóm tắt lệnh Ubuntu
Tóm tắt lệnh UbuntuQuang Ngoc
 
Tom tat lenh_ubuntu
Tom tat lenh_ubuntuTom tat lenh_ubuntu
Tom tat lenh_ubuntuthanhhokh03
 
Tom tat lenh ubuntu
Tom tat lenh ubuntuTom tat lenh ubuntu
Tom tat lenh ubuntunghoanganh
 
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.pdfChuong
 
Cac lenh co_ban_linux
Cac lenh co_ban_linuxCac lenh co_ban_linux
Cac lenh co_ban_linuxgofriv
 
Carte ref-ubuntu-vi (1)
Carte ref-ubuntu-vi (1)Carte ref-ubuntu-vi (1)
Carte ref-ubuntu-vi (1)Mr[L]ink
 
Dang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unixDang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unixBảo Bối
 
Làm thế nào để học linux trong 24h?
Làm thế nào để học linux trong 24h?Làm thế nào để học linux trong 24h?
Làm thế nào để học linux trong 24h?Công Nghệ - VTC Mobile
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxssuser49db3c1
 

Similaire à ShellProgramming (20)

Lập trình Shell 1.pdf
Lập trình Shell 1.pdfLập trình Shell 1.pdf
Lập trình Shell 1.pdf
 
9 bash
9 bash9 bash
9 bash
 
Linux+02
Linux+02Linux+02
Linux+02
 
8 filter
8 filter8 filter
8 filter
 
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)
 
python3.pptx
python3.pptxpython3.pptx
python3.pptx
 
Tóm tắt lệnh Ubuntu
Tóm tắt lệnh UbuntuTóm tắt lệnh Ubuntu
Tóm tắt lệnh Ubuntu
 
Tom tat lenh_ubuntu
Tom tat lenh_ubuntuTom tat lenh_ubuntu
Tom tat lenh_ubuntu
 
Tom tat lenh ubuntu
Tom tat lenh ubuntuTom tat lenh ubuntu
Tom tat lenh ubuntu
 
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
 
Hop ngu mips
Hop ngu mipsHop ngu mips
Hop ngu mips
 
Hdubuntu
HdubuntuHdubuntu
Hdubuntu
 
Linux04 hethongtaptin
Linux04 hethongtaptinLinux04 hethongtaptin
Linux04 hethongtaptin
 
Cac lenh co_ban_linux
Cac lenh co_ban_linuxCac lenh co_ban_linux
Cac lenh co_ban_linux
 
To ghi nho ubuntu
To ghi nho   ubuntuTo ghi nho   ubuntu
To ghi nho ubuntu
 
Carte ref-ubuntu-vi (1)
Carte ref-ubuntu-vi (1)Carte ref-ubuntu-vi (1)
Carte ref-ubuntu-vi (1)
 
Dang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unixDang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unix
 
Làm thế nào để học linux trong 24h?
Làm thế nào để học linux trong 24h?Làm thế nào để học linux trong 24h?
Làm thế nào để học linux trong 24h?
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
 
Carte ref-ubuntu-vi
Carte ref-ubuntu-viCarte ref-ubuntu-vi
Carte ref-ubuntu-vi
 

Plus de Hoàng Hải Nguyễn (20)

Building_a_database_with_PHP_and_SQL
Building_a_database_with_PHP_and_SQLBuilding_a_database_with_PHP_and_SQL
Building_a_database_with_PHP_and_SQL
 
Oracle
OracleOracle
Oracle
 
Chapter 6-Remoting
Chapter 6-RemotingChapter 6-Remoting
Chapter 6-Remoting
 
Giao_trinh_CSDL
Giao_trinh_CSDLGiao_trinh_CSDL
Giao_trinh_CSDL
 
notes4
notes4notes4
notes4
 
Introduction to EIGRP  [IP Routing] - Cisco Systems
Introduction to EIGRP  [IP Routing] - Cisco SystemsIntroduction to EIGRP  [IP Routing] - Cisco Systems
Introduction to EIGRP  [IP Routing] - Cisco Systems
 
MySQL-PHP
MySQL-PHPMySQL-PHP
MySQL-PHP
 
RTS introduction
RTS introductionRTS introduction
RTS introduction
 
DichCanKinh_thuchanh
DichCanKinh_thuchanhDichCanKinh_thuchanh
DichCanKinh_thuchanh
 
CCNA S3 - Chapter 04 - VTP
CCNA S3 - Chapter 04 - VTPCCNA S3 - Chapter 04 - VTP
CCNA S3 - Chapter 04 - VTP
 
DiemGiuaky(cnpm)
DiemGiuaky(cnpm)DiemGiuaky(cnpm)
DiemGiuaky(cnpm)
 
CCNA Security Lab 9 - Enabling SSH and HTTPS access to Cisco IOS Routers - CLI
CCNA Security Lab 9 - Enabling SSH and HTTPS access to Cisco IOS Routers - CLICCNA Security Lab 9 - Enabling SSH and HTTPS access to Cisco IOS Routers - CLI
CCNA Security Lab 9 - Enabling SSH and HTTPS access to Cisco IOS Routers - CLI
 
Quan ly bo nho trong C#
Quan ly bo nho trong C#Quan ly bo nho trong C#
Quan ly bo nho trong C#
 
notes5
notes5notes5
notes5
 
OOP1_K51
OOP1_K51OOP1_K51
OOP1_K51
 
RFC 1058 - Routing Information Protocol
RFC 1058 - Routing Information ProtocolRFC 1058 - Routing Information Protocol
RFC 1058 - Routing Information Protocol
 
Phan tich QL ban va mua hang
Phan tich QL ban va mua hangPhan tich QL ban va mua hang
Phan tich QL ban va mua hang
 
Giao trinh thuc hanh SQL
Giao trinh thuc hanh SQLGiao trinh thuc hanh SQL
Giao trinh thuc hanh SQL
 
Configuring Secure Shell on Routers and Switches Running Cisco IO
Configuring Secure Shell on Routers and Switches Running Cisco IOConfiguring Secure Shell on Routers and Switches Running Cisco IO
Configuring Secure Shell on Routers and Switches Running Cisco IO
 
Ch3-2
Ch3-2Ch3-2
Ch3-2
 

ShellProgramming

  • 1. Lập trình shell Làm thế nào để viết shell script: 1. Sử dụng bất kỳ trình soạn thảo nào như: vi, mcedit... 2. Sau khi viết shell script thì thiết lập quyền thực thi cho nó theo cấu trúc: chmod permission your-script-name Ví dụ: $ chmod +x your-script-name $ chmod 755 your-script-name 3. Thực thi script bằng cấu trúc: bash your-script-name sh your-script-name ./your-script-name Ví dụ: $ bash bar $ sh bar $ ./bar Ghi chú: Cấu trúc ./ có nghĩa là thư mục hiện hành, nhưng . (dot) nghĩa là thực thi lệnh trong shell với shell hiện hành. Cấu trúc dot như sau: . shell_script Ví dụ: $ . foo Shell script sau sẽ in "Knowledge is Power" trên màn hình: $ vi first # # My first shell script # clear echo "Knowledge is Power" Sau khi lưu file, thay đổi quyền (chmod 755 first) => chạy script này như sau: $ ./first Ghi chú: Shell script file có bằng phần mở rộng là .sh để dễ dàng xác định đó là shell script. Các biến trong Shell: Để xử lý dữ liệu/thông tin, dữ liệu phải được giữ trong bộ nhớ RAM của máy tính. RAM được chia thành nhiều vị trí nhỏ, và mỗi vị trí có một số duy nhất được gọi là địa chỉ bộ nhớ - được sử dụng để lưu dữ liệu. Bạn có thể gán tên cho vùng nhớ này => gọi là biến bộ nhớ hoặc biến. Trong Linux (Shell), có hai loại biến: 1. Biến hệ thống - được tạo và duy trì bởi chính Linux. Loại biến này được định nghĩa bằng các mẫu tự hoa.
  • 2. 2. Biến do người dùng định nghĩa (UDV - User Defined variables) - được tạo và duy trì bởi người dùng. Loại biến này được định nghĩa bằng các mẫu tự thường. Bạn có thể xem danh sách các biến hệ thống bằng lệnh set hoặc env. Một vài biến hệ thống quan trọng: BASH=/bin/bash - tên shell. BASH_VERSION=1.14.7(1) - phiên bản của shell. COLUMNS=80 - số cột cho màn hình. HOME=/home/vivek - thư mục nhà. LINES=25 - số dòng của màn hình. LOGNAME=students - tên đăng nhập của người dùng. OSTYPE=Linux - Loại hệ điều hành. PATH=/usr/bin:/sbin:/bin:/usr/sbin - Thiết lập đường dẫn. PS1=[¥u@¥h ¥W]¥$ - thiết lập prompt. PWD=/home/students/Common - thư mục hiện hành. SHELL=/bin/bash - tên shell. USERNAME=vivek - user nào hiện đang đăng nhập vào PC. Bạn có thể in ra bất kỳ biến môi trường nào như sau: $ echo $USERNAME $ echo $HOME Làm thế nào để định nghĩa UDV: Sử dụng cấu trúc sau: variable name=value - value được gán cho 'variable name' và value phải nằm bên phải dấu = Ví dụ: $ no=10 $ vech=Bus Nguyên tắc đặt tên biến (cả UDV và biến hệ thống): 1. Biến phải bắt đầu bằng ký tự alphanumeric hoặc underscore (_), theo sau bởi một hoặc nhiều ký tự alphanumeric. Ví dụ: Các biến hợp lệ: HOME, SYSTEM_VERSION, vech, no… 2. Không có khoảng trắng giữa hai bên dấu bằng khi gán giá trị biến. Ví dụ: Các khai báo sau sẽ có lỗi: $ no =10 $ no= 10 $ no = 10 3. Phân biệt chữ hoa và thường. Ví dụ: Các biến sau sẽ khác nhau: $ no=10
  • 3. $ No=11 $ NO=20 $ nO=2 4. Bạn có thể định nghĩa biến NULL như sau: $ vech= $ vech="" Khi in ra các biến NULL này, thì không có gì trên màn hình bởi vì chúng không có giá trị. 5. Không sử dụng ?, *...để đặt tên cho biến. In và truy cập giá trị của UDV: $variablename hoặc echo $variablename Tính toán trong Shell: Sử dụng các phép toán số sau theo cấu trúc sau: expr op1 math-operator op2 Ví dụ: $ expr 1 + 3 $ expr 2 - 1 $ expr 10 / 2 $ expr 20 % 3 $ expr 10 ¥* 3 $ echo `expr 6 + 3` Trích dẫn (quote): Có 3 loại quote: 1. " (double quote): Bất kỳ thứ gì trong đây đều bị hủy ý nghĩa của ký tự đó (trừ ¥ và $) 2. ' (single quote): Duy trì không thay đổi. 3. ` (back quote): thực thi lệnh. Ví dụ: $ echo "Today is date" => in ra Today is date $ echo "Today is `date`". => in ra Today is Tue Jan.... Trạng thái kết thúc (exit status): Mặc định trong Linux nếu lệnh/shell script được thực thi, nó sẽ trả về hai loại giá trị - được sử dụng để xem lệnh/shell script được thực thi thành công hay không. 1. Nếu trả về giá trị là 0 - thành công. 2. Không phải 0, lệnh không thành công hoặc có một vài lỗi khi thực thi lệnh/shell script. => giá trị này gọi exit status. Ví dụ: unknow1file không tồn tại trong đĩa cứng thì lệnh “rm unknow1file” sẽ in ra lỗi như sau: rm: cannot remove `unkowm1file': No such file or directory. Và sau đó nếu bạn gõ lệnh $ echo $? thì nó sẽ in ra giá trị nonzero để chỉ có lỗi.
  • 4. Câu lệnh read: Sử dụng để nhận dữ liệu từ bàn phím và lưu vào biến. Cấu trúc: read variable1, variable2,...variableN Ví dụ: Script sau sẽ hỏi tên người dùng và chờ họ nhập vào từ bàn phím. Sau khi người dùng nhập tên và nhấn Enter thì tên sẽ được lưu trong biến fname. $ vi sayH # #Script to read your name from key-board # echo "Your first name please:" read fname echo "Hello $fname, Lets be friend!" Chạy nó như sau: $ chmod 755 sayH $ ./sayH Your first name please: vivek Hello vivek, Lets be friend! Wild cards: 1. *: phù hợp với bất kỳ chuỗi hoặc nhóm ký tự nào. Ví dụ: $ ls * - hiển thị tất cả các file. $ ls a* - hiển thị tất cả các file mà tên của nó bắt đầu bằng mẫu tự 'a'. $ ls *.c - hiển thị tất cả các file có bằng mở rộng là .c 2. ?: phù hợp bất kỳ 1 ký tự nào. Ví dụ: $ ls ? - hiển thị tất cả các file mà tên của nó có chiều dài 1 ký tự. $ ls fo? - hiển thị tất cả các file mà tên của nó có 3 ký tự và tên file bắt đầu bằng fo. 3. [...]: phù hợp bất kỳ 1 trong các ký tự trong dấu ngoặc. Ví dụ: $ ls [abc]* - thể hiện tất cả các file bắt đầu với mẫu tự a, b, c. Ghi chú: [..-..]: Một cặp các ký tự được phân chia bởi dấu trừ để ghi nhận một dãy. Ví dụ: $ ls /bin/[a-c]* - hiển thị tất cả các file bắt đầu với mẫu tự a, b, c. Nếu ký tự đầu tiên theo sau [ là ! hoặc ^, thì bất kỳ ký tự nào không phù hợp sẽ được hiển thị.
  • 5. $ ls /bin/[!a-o] $ ls /bin/[^a-o] => sẽ hiển thị tất cả các file trong thư mục bin mà ký tự đầu tiên không phải là a, b, c...o. hiều lệnh trên một dòng lệnh: command1;command2 Ví dụ: $ date;who - sẽ in ra ngày hiện tại theo sau là tên người dùng đăng nhập hiện tại. Dòng lệnh: Khi thực thi lệnh sau (giả sử file "grate_stories_of" không tồn tại trên hệ thống). $ ls grate_stories_of - sẽ in ra thông báo “grate_stories_of: No such file or directory” ls là tên của lệnh và shell sẽ thực thi lệnh này. Từ đầu tiên của dòng lệnh là ls - tên của lệnh cần thực thi. Phần còn lại là các tham số của lệnh này. Ví dụ: $ tail +10 myf - tên lệnh là tail và tham số là +10 và myf. Ghi chú: $# nắm giữ các tham số của dòng lệnh. $* hoặc $@ tham chiếu đến các tham số được chuyển đến script. Chuyển hướng: Hầu hết các lệnh đều kết xuất ra màn hình hoặc nhận tham số từ bàn phím. Nhưng trong Linux thì có thể gửi kết xuất đến hoặc đọc dữ liệu từ tập tin. Ví dụ: $ ls cho kết xuất ra màn hình, để gửi kết xuất ra tập tin thì sử dụng lệnh sau: $ ls > filename 1) Ký hiệu >: command > filename - kết xuất kết quả của lệnh ra file. Nếu như file tồn tại, nó sẽ ghi đè lên, ngược lại file mới sẽ được tạo. 2) Ký hiệu >>: command >> filename - kết xuất kết quả đến phần cuối của file. Nếu như file tồn tại, nó sẽ được mở và thông tin mới được ghi vào cuối file, không sợ mất dữ liệu/thông tin trước. Và nếu file không tồn tại, thì file mới được tạo. Ví dụ: $date >> myfiles 3) Ký hiệu <: command < filename - nhận dữ liệu từ file thay vì bàn phím. Ví dụ: $ cat < myfiles $ sort < sname > sorted_names - lệnh sort lấy dữ liệu từ file tên là sname và kết xuất kết quả ra file tên là sorted_names.
  • 6. Pipes: Định nghĩa: Một pipe là một nơi lưu tạm kết xuất của một lệnh và sau đó chuyển vào input của lệnh thứ hai. Pipe được sử dụng để chạy nhiều hơn 2 lệnh trên cùng một dòng lệnh. Filter: Nếu một lệnh chấp nhận input từ stdin và xuất nó ra stdout thì được gọi là filter. Một filter thực thi một vài xử lý trên input và cho ra ouput. Ví dụ: Giả sử bạn có một file được gọi là 'hotel.txt' với 100 dòng dữ liệu. Và bạn chỉ muốn in ra dòng từ 20 đến 30 và lưu kết qủa này vào file gọi là 'hlist' thì sử dụng lệnh sau: $ tail +20 < hotel.txt | head -n30 >hlist1 => Ở đây lệnh head là một filter nhận input từ lệnh tail (lệnh tail bắt đầu chọn từ dòng 20 trong file 'hotel.txt'. Và chuyển các dòng này làm input cho head, cuối cùng chuyển ouput đến file 'hlist'.) Process: Tiến trình là một chương trình (lệnh) để thực thi một công việc xác định. Trong Linux khi bạn khởi tạo một tiến trình, nó sẽ cho tiến trình đó một con số gọi là PIP hoặc process-id, PID khởi đầu từ 0 đến 65535. Ví dụ: $ls -lR - lệnh ls sẽ liệt kê các file trong thư mục hoặc tất cả thư mục con trong thư mục hiện hành - nó là một tiến trình. Tại sao có tiến trình: Vì Linux là hệ điều hành đa người dùng, đa nhiệm. Nghĩa là bạn có thể chạy nhiều hơn 2 tiến trình đồng thời nếu bạn muốn. Ví dụ: Để tìm nhiều file mà bạn có trên hệ thống, bạn có thể thực hiện lệnh sau: $ ls / -R | wc -l => lệnh này sẽ mất nhiều thời gian để tìm kiếm tất cả các file trên hệ thống, vì thế bạn có thể chạy lệnh này ở background: $ ls / -R | wc -l & Do đó một thể hiện của lệnh đang chạy được gọi là process và một con số được in ra bởi shell gọi là process-id (PID), PID này có thể sử dụng để xác định tiến trình đang chạy. Các lệnh liên quan đến process: • ps - xem tiến trình đang chạy. • kill - dừng bất kỳ tiến trình nào bởi PID của nó. • killall- dừng tiến trình bởi tên của nó. • ps -ag - lấy thông tin về tất cả các tiến trình đang chạy. • kill 0 - dừng tất cả các tiến trình trừ shell của bạn. • command & - chạy lệnh ở background. • ps aux - hiển thị chủ sở hữu của các tiến trình cùng với các tiến trình đó. • ps ax | grep process-U-want-to-see - xem từng tiến trình đang chạy hoặc không chạy. • top - xem tiến trình đang chạy và các thông tin khác như bộ nhớ, CPU usage cùng với thời gian thực.
  • 7. • pstree - hiển thị cây các tiến trình. (Nguồn từ http://www.freeos.com/guides/lsst/)