* 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