Các Lệnh Cơ Bản Linux Shell Programming - MTD SEC

MTD SEC

Chia Sẻ Để Thành Công

Home Top Ad

Post Top Ad

Thứ Bảy, 16 tháng 6, 2018

Các Lệnh Cơ Bản 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, redirection 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.
grep "hello" file.txt | wc -l

* redirection: 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
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ư:
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 ('):
#!/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 :
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 && và ||:

[ -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  cũng được sử dụng như ví dụ sau:
#!/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 ?).
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:
#!/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:
select var in ... ; do
break
done
.... now $var can be used ....

Ví dụ:
#!/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
while ...; do
....
done

* Lệnh for-loop
for var in ....; do
....
done

 

Không có nhận xét nào:

Đăng nhận xét

Post Top Ad