banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Tóm tắt Linux Shell Programming  XML
  [Article]   Tóm tắt Linux Shell Programming 08/08/2006 22:43:50 (+0700) | #1 | 13241
[Avatar]
tranvanminh
HVA Friend

Joined: 04/06/2003 06:36:35
Messages: 516
Location: West coast
Offline
[Profile] [PM]
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/
[Up] [Print Copy]
  [Article]   Tóm tắt Linux Shell Programming 18/04/2010 00:28:11 (+0700) | #2 | 209221
actuladn
Member

[Minus]    0    [Plus]
Joined: 25/08/2009 00:44:47
Messages: 89
Location: HCM
Offline
[Profile] [PM] [WWW]
anh cho em hỏi. shell, script có thể kết nối với csdl sql ? giả sử in giá trị nào đó trong csdl thì có làm được không?
Honeyboy Cung Cấp Mật Ong, Sữa Ong Chúa, Phấn Hoa | DHM Văn Phòng Phẩm Giá Rẻ
[Up] [Print Copy]
  [Article]   Tóm tắt Linux Shell Programming 18/04/2010 09:58:49 (+0700) | #3 | 209228
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

actuladn wrote:
anh cho em hỏi. shell, script có thể kết nối với csdl sql ? giả sử in giá trị nào đó trong csdl thì có làm được không? 

Làm được. Bạn có thể đọc option -e trong man mysql hoặc đọc về Here Document: http://tldp.org/LDP/abs/html/here-docs.html
Let's build on a great foundation!
[Up] [Print Copy]
  [Article]   Tóm tắt Linux Shell Programming 19/04/2010 13:25:35 (+0700) | #4 | 209302
actuladn
Member

[Minus]    0    [Plus]
Joined: 25/08/2009 00:44:47
Messages: 89
Location: HCM
Offline
[Profile] [PM] [WWW]
cám ơn anh quanta.em thử như thế này
mysql snort -p<<EOFMYSQL
SELECT * from signature;
EOFMYSQL 

thì vẫn hiện ra csdl nhưng khi thực thi đòi pass, có cách nào điền pass luôn không hay phải bỏ pass đi?>
Honeyboy Cung Cấp Mật Ong, Sữa Ong Chúa, Phấn Hoa | DHM Văn Phòng Phẩm Giá Rẻ
[Up] [Print Copy]
  [Article]   Tóm tắt Linux Shell Programming 19/04/2010 15:15:53 (+0700) | #5 | 209314
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

actuladn wrote:
em thử như thế này
mysql snort -p<<EOFMYSQL
SELECT * from signature;
EOFMYSQL 

thì vẫn hiện ra csdl nhưng khi thực thi đòi pass, có cách nào điền pass luôn không hay phải bỏ pass đi?> 

Bạn có thể gọi luôn password từ command hoặc lưu nó vào đâu đó.

PS: thử ngâm cứu thằng Expect xem: http://expect.nist.gov/
Let's build on a great foundation!
[Up] [Print Copy]
  [Article]   Tóm tắt Linux Shell Programming 20/04/2010 15:15:04 (+0700) | #6 | 209404
actuladn
Member

[Minus]    0    [Plus]
Joined: 25/08/2009 00:44:47
Messages: 89
Location: HCM
Offline
[Profile] [PM] [WWW]
cám ơn anh quanta, đã khắc phục được nhưng với đoạn script khác. anh quanta có tài liệu nào về cách lấy từng dòng dữ liệu không? bên PHP có lệnh như thế này mysql_fetch_assoc
Honeyboy Cung Cấp Mật Ong, Sữa Ong Chúa, Phấn Hoa | DHM Văn Phòng Phẩm Giá Rẻ
[Up] [Print Copy]
  [Article]   Tóm tắt Linux Shell Programming 20/04/2010 18:03:55 (+0700) | #7 | 209414
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

actuladn wrote:
cám ơn anh quanta, đã khắc phục được nhưng với đoạn script khác. anh quanta có tài liệu nào về cách lấy từng dòng dữ liệu không? bên PHP có lệnh như thế này mysql_fetch_assoc 

Bạn thử cách này xem được không (mình chưa test):

Code:
RESULT=`mysql -u<USERNAME> -p<PASSWORD> -e "use <YOUR_DATABASE>; select * from <YOUR_TABLE>;"`
for ROW in $RESULT; do
    echo $ROW
done


Tuy nhiên, mình đang tự hỏi là nếu bạn biết PHP sao bạn không dùng PHP luôn, hoặc Python hay Perl cũng được.
Let's build on a great foundation!
[Up] [Print Copy]
  [Article]   Tóm tắt Linux Shell Programming 20/04/2010 19:05:58 (+0700) | #8 | 209424
actuladn
Member

[Minus]    0    [Plus]
Joined: 25/08/2009 00:44:47
Messages: 89
Location: HCM
Offline
[Profile] [PM] [WWW]
hì em làm đề tài về tích hợp snort với iptable nên định viết module lấy csdl từ snort sau đó tạo rule cho iptables drop truy cập đó. Cách này làm bằng tay nhưng có còn hơn không. Anh có phương pháp nào khác không?
Honeyboy Cung Cấp Mật Ong, Sữa Ong Chúa, Phấn Hoa | DHM Văn Phòng Phẩm Giá Rẻ
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

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