banner
 .::*nix::. Tóm tắt Linux Shell Programming Go to original post Author: tranvanminh - Translator:  - Entry Date: 20/02/2009 14:50:14
Tóm tắt Linux Shell Programming


Tạo file script

* Soạn thảo file text, đặt tên file shellfile (có đuôi bất kỳ), dòng đầu tiên có dòng sau: #!/bin/sh, sau đó là các lệnh Shell hoặc các lệnh Linux.
* Chạy các lệnh sau để có thể chạy được chmod +x shellfile , sau đó có thể chạy bằng lệnh ./shellfile

Ý nghĩa các ký tự

* Bắt đầu bằng dấu '#'- ký hiệu rằng dòng đấy là comment.
* Dấu ngoặc đơn 'a' sẽ in nguyên văn đoạn text trong ngoặc.
* Dấu "a", sẽ in nguyên văn đoạn text, trong đó biến có thể được thay giá trị.

Các biến

* Biến không cần phải khai báo trước, bắt đầu bằng chữ cái (ví dụ là var), khi tham chiếu thì thêm dấu $ ở trước, ví dụ $var. (gán var=2; thì khi echo $var, sẽ cho kết quả là 2).
* có thể dùng biến và nối với ký tự như sau: ${var}nd thì kết quả trả về 2nd.

Pipes, wwwection and backtick

* pipes (|) gửi đầu ra output (stdout) của một tiến trình sang đầu vào (stdin) của mộ tiến trình khác.

Code:


grep "hello" file.txt | wc -l



* wwwection: ghi đầu ra output của mọt chương trình ra một file khác hoặc nối vào file khác
> ghi ra file, nếu nó đã tồn tại thì ghi đè nó
>> Nối vào file cũ nếu đã tồn tại hoặc nếu chưa có thì tạo ra file mới và ghi dữ liệu vào đó.

* Backtick
Đầu ra của một chương trình được sử dụng làm tham số cho chương trình khác (không phải như đầu vào stdin như ở trên) cho một lệnh khác. Bạn cũng có thể dùng đầu ra output như là biến, tham số của chương trình khác.
Lệnh

Code:


find . -mtime -1 -type f -print



sẽ tìm tất cả các file được thay đổi trong vòng 24 giờ qua (-mtime -2 sẽ là 48). Nếu bạn muốn nén lại thành một file để lưu trữ thì lệnh có thể được sử dụng như:

Code:


tar xvf file.tar infile1 infile2 ...



Bạn có thể gộp hai lệnh đó và dùng dấu (`), không phảit dấu ngoặc đơn ('):

Code:


#!/bin/sh

# Sử dụng dấu (`) không phải dấu ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`



Lệnh có cấu trúc

* Lệnh "if": kiểm tra điều kiện đúng :

Code:


if ....; then

....
elif ....; then
....
else
....
fi



* Lệnh "test" thường được viết như " [ ] ". Lưu ý là phải có dấu cách sau và trước dấu "[ ]". Ví dụ:

[ -f "somefile" ] : Test if somefile is a file.
[ -x "/bin/ls" ] : Test if /bin/ls exists and is executable.
[ -n "$var" ] : Test if the variable $var contains something
[ "$a" = "$b" ] : Test if the variables "$a" and "$b" are equal

Gõ lệnh "man test" để có thêm các tham số.

* Gõ tắt bằng các dấu &&||:

[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"

Dấu && được sử dụng như điều kiện và. Trong ví dụ trên : "Nếu /etc/shadow tồn tại và (AND) lệnh echo sẽ được thực hiện". Toán tử OR smilie) cũng được sử dụng như ví dụ sau:

Code:


#!/bin/sh

mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ] || { echo "Can not read $mailfolder" ; exit 1; }
echo "$mailfolder has mail from:"
grep "^From " $mailfolder



Nếu có thư thì hiện các thư, còn không thì thông báo là không đọc được và kết thúc.

* Lệnh Case: kiểm tra thoả mãn (using shell wildcards such as * and ?).

Code:


case ... in

...) do something here;;
esac



Ví dụ chúng ta có thể viết một chương trình smartzip có thể giải nén một cách tự động với các dạng:
Code:


#!/bin/sh

ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac


Ở đây $1 là tham số (có thể đến $9, $* là tất cả các tham số) ví dụ
smartzip articles.zip.

* Lệnh select được sử dụng để tương tác lựa chọn các phương án khác nhau:

Code:


select var in ... ; do

break
done
.... now $var can be used ....



Ví dụ:

Code:


#!/bin/sh

echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"


Chương trình sẽ in ra màn hình:

What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
 

* Lệnh while-loop

Code:


while ...; do

....
done



* Lệnh for-loop

Code:


for var in ....; do

....
done




Nguồn : http://vkopensource.blogspot.com/
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|