Để học được điều gì đó, bạn cần thực hành mà không sợ thất bại. Tôi tin vào tính thực tế và sẽ cùng bạn khám phá thế giới thực của ngôn ngữ Scripting.
Bài viết này mở rộng bài đầu tiên Hiểu về Linux Shell và Shell Scripting cơ bản – Phần I, nơi chúng ta đã thử nghiệm Scripting, và phần này sẽ không làm bạn thất vọng.
Script 1: Vẽ mẫu đặc biệt
#!/bin/bash
MAX_NO=0
echo -n "Nhập số từ 5 đến 9: "
read MAX_NO
if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; then
echo "Đã nói nhập số từ 5 đến 9, hãy thử lại"
exit 1
fi
clear
for (( i=1; i<=MAX_NO; i++ ))
do
for (( s=MAX_NO; s>=i; s-- ))
do
echo -n " "
done
for (( j=1; j<=i; j++ ))
do
echo -n " ."
done
echo ""
done
###### Giai đoạn thứ 2 ######################
for (( i=MAX_NO; i>=1; i-- ))
do
for (( s=i; s<=MAX_NO; s++ ))
do
echo -n " "
done
for (( j=1; j<=i; j++ ))
do
echo -n " ."
done
echo ""
done
echo -e "\n\n\t\t\t Khi cần giúp đỡ, Tecmint.com luôn ở đây"
Hầu hết các từ khóa trên đều đã quen thuộc và tự giải thích. Ví dụ: MAX đặt giá trị tối đa cho biến, for là vòng lặp và mọi thứ trong vòng lặp sẽ thực thi lại cho đến khi điều kiện lặp không còn đúng.
Kết quả mẫu
[admin@wsxdn.com ~]# chmod 755 Special_Pattern.sh
[admin@wsxdn.com ~]# ./Special_Pattern.sh
Nhập số từ 5 đến 9: 6
.
. .
. . .
. . . .
. . . . .
. . . . . .
. . . . .
. . . .
. . .
. .
.
Khi cần giúp đỡ, Tecmint.com luôn ở đây
Nếu bạn hơi am hiểu bất kỳ ngôn ngữ lập trình nào, việc học script trên không khó, ngay cả khi bạn mới 접触 tính toán, lập trình và Linux cũng không quá khó khăn.
Tải Special_Pattern.sh
Script 2: Tạo script nhiều màu sắc
Ai nói Linux đơn sắc và nhàm chán? Lưu mã dưới đây vào file [dot] sh, cấp quyền thực thi và chạy nó, đừng quên cho tôi biết cảm nhận, hãy nghĩ xem bạn có thể đạt được gì khi áp dụng nó.
#!/bin/bash clear echo -e "\033[1m Hello World" # hiệu ứng in đậm echo -e "\033[5m Blink" # hiệu ứng nhấp nháy echo -e "\033[0m Hello World" # trở về bình thường echo -e "\033[31m Hello World" # màu đỏ echo -e "\033[32m Hello World" # màu xanh lá echo -e "\033[33m Hello World" # xem phần còn lại trên màn hình echo -e "\033[34m Hello World" echo -e "\033[35m Hello World" echo -e "\033[36m Hello World" echo -e -n "\033[0m" # trở về bình thường echo -e "\033[41m Hello World" echo -e "\033[42m Hello World" echo -e "\033[43m Hello World" echo -e "\033[44m Hello World" echo -e "\033[45m Hello World" echo -e "\033[46m Hello World" echo -e "\033[0m Hello World"
Lưu ý: Đừng lo lắng về mã màu lúc này, những thứ quan trọng sẽ dần dần thuộc lòng bạn.
Cảnh báo: Terminal của bạn có thể không hỗ trợ nhấp nháy.
Kết quả mẫu
[admin@wsxdn.com ~]# chmod 755 Colorfull.sh [admin@wsxdn.com ~]# ./Colorfull.sh Hello World Blink Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World
Tải Colorfull.sh
Script 3: Mã hóa file/thư mục
Script này sẽ mã hóa một file (nhớ không? Trong Linux, thư mục/ổ đĩa/... mọi thứ đều được coi là file). Hạn chế hiện tại là không hỗ trợ tự động hoàn thành tên bằng phím TAB. Bạn cần đặt script và file cần mã hóa trong cùng thư mục. Có thể cần cài đặt "pinentry-gui" bằng yum hoặc apt nếu cần.
[admin@wsxdn.com ~]# yum install pinentry-gui [admin@wsxdn.com ~]# apt-get install pinentry-gui
Tạo file tên "Encrypt.sh" với script sau, cấp quyền thực thi và chạy như hình minh họa.
#!/bin/bash echo "Chào mừng, tôi sẵn sàng mã hóa file/thư mục cho bạn" echo "Hiện tại tôi có hạn chế, hãy đặt tôi cùng thư mục với file cần mã hóa" echo "Nhập tên file chính xác kèm phần mở rộng" read file gpg -c $file echo "Đã mã hóa file thành công..." echo "Tôi sẽ xóa file gốc" rm -rf $file
Kết quả mẫu
[admin@wsxdn.com ~]# chmod 755 Encrypt.sh [admin@wsxdn.com ~]# ./Encrypt.sh Chào mừng, tôi sẵn sàng mã hóa file/thư mục cho bạn hiện tại tôi có hạn chế, hãy đặt tôi cùng thư mục với file cần mã hóa Nhập tên file chính xác kèm phần mở rộng package.xml ┌─────────────────────────────────────────────────────┐ │ Nhập cụm từ mật khẩu │ │ │ │ Cụm từ mật khẩu *******____________________________ │ │ │ │ <OK> <Hủy> │ └─────────────────────────────────────────────────────┘ Vui lòng nhập lại cụm từ mật khẩu ┌─────────────────────────────────────────────────────┐ │ Vui lòng nhập lại cụm từ mật khẩu │ │ │ │ Cụm từ mật khẩu ********___________________________ │ │ │ │ <OK> <Hủy> │ └─────────────────────────────────────────────────────┘ Đã mã hóa file thành công... Đang xóa file gốc
gpg -c: Lệnh này mã hóa file bằng cụm từ mật khẩu (password). Trong quá trình học tập, bạn chưa bao giờ nghĩ quá trình thực tế lại dễ dàng đến vậy. Sau khi mã hóa file, bạn cần gì? Chắc chắn là giải mã file. Và tôi muốn bạn – người học, người đọc – tự viết script giải mã, đừng lo, tôi không bỏ bạn giữa chừng, tôi chỉ muốn bạn thu được gì đó từ bài viết này.
Lưu ý: gpg -d filename.gpg > filename là điều bạn cần triển khai trong script giải mã. Bạn có thể đăng script của mình trong bình luận nếu thành công, nếu không bạn có thể nhờ tôi viết giúp.
Tải Encrypt.sh
Script 4: Kiểm tra mức sử dụng Server
Kiểm tra mức sử dụng server là nhiệm vụ quan trọng của quản trị viên, và quản trị viên giỏi là người biết tự động hóa công việc hàng ngày. Dưới đây là script cung cấp nhiều thông tin về server. Hãy tự kiểm tra.
#!/bin/bash
date
echo "uptime:"
uptime
echo "Đang kết nối:"
w
echo "--------------------"
echo "Đăng nhập gần đây:"
last -a | head -3
echo "--------------------"
echo "Sử dụng ổ đĩa và bộ nhớ:"
df -h | xargs | awk '{print "Free/total disk: " $11 " / " $9}'
free -m | xargs | awk '{print "Free/total memory: " $17 " / " $8 " MB"}'
echo "--------------------"
start_log=`head -1 /var/log/messages | cut -c 1-12`
oom=`grep -ci kill /var/log/messages`
echo -n "Lỗi OOM kể từ $start_log: " $oom
echo ""
echo "--------------------"
echo "Mức sử dụng và tiến trình tốn tài nguyên nhất:"
top -b | head -3
top -b | head -10 | tail -4
echo "--------------------"
echo "Cổng TCP mở:"
nmap -p- -T4 127.0.0.1
echo "--------------------"
echo "Kết nối hiện tại:"
ss -s
echo "--------------------"
echo "Tiến trình:"
ps auxf --width=200
echo "--------------------"
echo "vmstat:"
vmstat 1 5
Kết quả mẫu
[admin@wsxdn.com ~]# chmod 755 Server-Health.sh [admin@wsxdn.com ~]# ./Server-Health.sh Tue Jul 16 22:01:06 IST 2013 uptime: 22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18 Currently connected: 22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18 USER TTY FROM admin@wsxdn.com IDLE JCPU PCPU WHAT tecmint pts/0 116.72.134.162 21:48 0.00s 0.03s 0.03s sshd: tecmint [priv] -------------------- Last logins: tecmint pts/0 Tue Jul 16 21:48 still logged in 116.72.134.162 tecmint pts/0 Tue Jul 16 21:24 - 21:43 (00:19) 116.72.134.162 -------------------- Disk and memory usage: Free/total disk: 292G / 457G Free/total memory: 3510 / 3838 MB -------------------- OOM errors since Jul 14 03:37 : 0 -------------------- Utilization and most expensive processes: top - 22:01:07 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18 Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.3%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 3788 1128 932 S 0.0 0.0 0:32.94 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:14.07 migration/0
Lưu ý: Tôi đã đưa ra script hiển thị kết quả trên terminal, làm sao để ghi ra file để tham khảo sau? Hãy tự triển khai bằng toán tử chuyển hướng.
- >: Toán tử chuyển hướng tạo file mới, nếu đã tồn tại thì ghi đè nội dung.
- >>: Khi dùng >>, bạn đang thêm thông tin thay vì thay thế.
- >> an toàn hơn so với >.
Tải Server-Health.sh
Script 5: Kiểm tra dung lượng ổ đĩa và gửi cảnh báo email
Làm sao để nhận email khi dung lượng ổ đĩa trên phân vùng PART vượt quá ngưỡng cho phép? Đây là script cứu cánh cho quản trị web với một chút chỉnh sửa.
MAX=95
admin@wsxdn.com
PART=sda1
USE=`df -h | grep $PART | awk '{ print $5 }' | cut -d'%' -f1`
if [ $USE -gt $MAX ]; then
echo "Phần trăm đã dùng: $USE" | mail -s "Sắp hết dung lượng ổ đĩa" $EMAIL
fi
Lưu ý: Thay "USER" bằng tên người dùng của bạn. Kiểm tra mail bằng lệnh mail.
Tải Check-Disk-Space.sh
Viết script và lập trình không có giới hạn, bất cứ điều gì đều có thể triển khai theo yêu cầu. Đó là tất cả cho lần này, trong bài tiếp theo tôi sẽ mang đến những hương vị khác của scripting. Cho đến lúc đó hãy bình tĩnh và theo dõi, tận hưởng nhé.