Mar 1, 2012

Debug SHELL script trên Unix/Linux

Không giống như những ngôn ngữ lập trình khác, khi viết các shell script, ta không thể có được sự hỗ trợ mạnh mẽ từ compiler, không có breakpoint, ... để phục vụ quá trình debug. Thay vào đó ta phải xem kết quả chạy từng dòng lệnh để kiểm tra luồng xử lý dữ liệu của shell, và ngoài ra, yếu tố hàng đầu phải nắm được khi viết SHELL script, đó là phải cẩn thận cú pháp, SHELL rất nhạy cảm với điều này.

Có một vài cách thức để thực hiện debug một shell script trong quá trình chạy.

Sử dụng tùy chọn -x trong lời gọi shell

Thêm option -x vào trong lệnh gọi shell để chạy script, ví dụ:
 

[oracle@db backupdb]$ sh -x rman_backup_test.sh
+ echo oracle
oracle
+ ORACLE_SID=dnict
+ export ORACLE_SID
+ ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
+ export ORACLE_HOME
+ LOG_DIR=/home/oracle/backupdb/rman_backup_logs
+ export LOG_DIR
+ CMD_DIR=/home/oracle/backupdb/rman_backup_cmds
+ export CMD_DIR
++ date +%d%m%Y
+ DATE_STRING=01032012
+ export DATE_STRING
+ logfile=/home/oracle/backupdb/rman_backup_logs/auto_backup_rman_01032012.log
++ ls /home/oracle/backupdb/rman_backup_logs
++ grep 01032012
++ wc -l
+ append_number=0
+ '[' 0 -gt 0 ']'
++ date +%a
+ TODAY=Thu
+ export TODAY
+ echo 'today: Thu'
today: Thu
+ '[' Thu = Sun -o Thu = Thu ']'
+ echo 'Today is Sunday or Thusday, then execute full backup script'
Today is Sunday or Thusday, then execute full backup script
+ echo 'Finished!'
Finished!

Trong output ở trên, các dòng mở đầu với dấu + là kết quả thực thi từng lệnh, còn các output không có dấu + là kết quả sinh ra do lệnh echo trong script. Dòng có ++ là kết quả của việc thực thi một lệnh shell con bên trong một lệnh shell khác

Sử dụng lệnh set -x trong script
Cách thức tương tự như tùy chọn -x trong lời gọi shell. Ta có thể sử dụng lệnh set -x trong chuỗi lệnh của script để thiết lập chế độ debug cho script và set +x để tắt chế độ này. Ví dụ:

#!/bin/bash
clear
# turn on debug mode
set -x
for f in *
do
file $f
done
# turn OFF debug mode
set +x
ls
# more commands


Tham khảo: http://www.cyberciti.biz

No comments:

Post a Comment