由於工作需要,寫了一個腳本,該腳本的功能是實現:
有兩個.txt文件,裡面存放了一些域名,然後從這兩個.txt文件裡面,隨機取出一個域名,寫入到shiting.htm和xiazai.htm文件裡面。
腳本寫好了,測了語法,沒問題,在虛擬機裡面也測試通過的,沒問題。可是一拷貝到生產環境中,就出了大問題。糾結了我兩天,現在終於得到了解決,現在總結以下,以免以後再犯同樣的錯誤。
腳本如下:
#!/bin/bash
# author: honway.liu
# date: 2012-06-01
# define location file
yyxz=/data/cdn/xiazai.txt
yyst=/data/cdn/shiting.txt
#xiazai=/data/api/xiazai.htm
#shiting=/data/api/shiting.htm
xiazai=/tmp/xiazai.htm
shiting=/tmp/shiting.htm
log=/tmp
# xiazai & shiting file line number
xznm=$(wc -l $yyxz|awk '{print $1}')
stnm=$(wc -l $yyst|awk '{print $1}')
# random for xiazai & shiting
down=$[$RANDOM%$xznm+1]
listen=$[$RANDOM%$stnm+1]
# get xiazai & shiting domain name
xzym=$(sed -n ${down}p $yyxz)
stym=$(sed -n ${listen}p $yyst)
# write domain name into htm files.
echo -n $xzym > $xiazai
echo -n $stym > $shiting
# out put logs
echo "The $xzym at `date +'%F %T'` be provided" >>/$log/xiazai_domain.log
echo "The $stym at `date +'%F %T'` be provided" >>/$log/shiting_domain.log
exit 0
本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/
語法檢測是沒問題的,但是執行的時候,就亂七八糟的。

上面最後一個錯是因為exit0沒有空格。看sed的結果是OK的,但是變量的內容就亂七八糟,讓人很頭痛。看下輸出的結果


cat的結果很無語,命令提示符和結果重合了,看文件的內容,發現後面有個 ^M,這應該是DOS格式文件的換行符,LINUX裡面的換行符應該是$才對。查看下文件格式發現腳本的是UNIX。但是再執行,還是同樣的問題。然後我就把腳本手動的在LINUX裡面輸入了一遍,格式應該不會有問題了,但是還是同樣的問題。
今天突然靈機一動,會不會是.txt文件格式的問題,而不是腳本格式的問題呢。所以試了一下
VI打開之後,在命令模式下,使用命令 set ff? 可以查看到文件格式

格式確實是dos,然後使用命令改一下
set ff=unix

把兩個全改了,然後再執行腳本,一切OK。
darling@00057:/tmp$ bash -x 123.sh
+ yyxz=/data/cdn/xiazai.txt
+ yyst=/data/cdn/shiting.txt
+ xiazai=/tmp/xiazai.htm
+ shiting=/tmp/shiting.htm
+ log=/tmp
++ wc -l /data/cdn/xiazai.txt
++ awk '{print $1}'
+ xznm=10
++ wc -l /data/cdn/shiting.txt
++ awk '{print $1}'
+ stnm=10
+ down=3
+ listen=3
++ sed -n 3p /data/cdn/xiazai.txt
+ xzym=http://nyl.gpix4y.yymommy.com
++ sed -n 3p /data/cdn/shiting.txt
+ stym=http://y3ek.otw.hotchanson.com
+ echo -n http://nyl.gpix4y.yymommy.com
+ echo -n http://y3ek.otw.hotchanson.com
++ date '+%F %T'
+ echo 'The http://nyl.gpix4y.yymommy.com at 2012-06-07 11:50:40 be provided'
++ date '+%F %T'
+ echo 'The http://y3ek.otw.hotchanson.com at 2012-06-07 11:50:40 be provided'
+ exit 0
哎呀我的老天爺,終於搞定了。真不容易,折騰了我幾天。
一個文件格式的錯誤,就能引起腳本運行的精神錯亂,哎,吸取教訓,以後有什麼文件,要在LINXU裡面寫,拒絕從WIN寫好之後,再傳入LINUX.
本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/