Bash脚本莫名奇妙的错误

阅读: 评论:0

Bash脚本莫名奇妙的错误

Bash脚本莫名奇妙的错误

 由于工作需要,写了一个脚本,该脚本的功能是实现:

有两个.txt文件,里面存放了一些域名,然后从这两个.txt文件里面,随机取出一个域名,写入到shiting.htm和xiazai.htm文件里面。

脚本写好了,测了语法,没问题,在虚拟机里面也测试通过的,没问题。可是一拷贝到生产环境中,就出了大问题。纠结了我两天,现在终于得到了解决,现在总结以下,以免以后再犯同样的错误。

脚本如下:

 

 
  1. #!/bin/bash 
  2. # author: honway.liu 
  3. # date: 2012-06-01 
  4.  
  5. # define location file 
  6. yyxz=/data/ 
  7. yyst=/data/ 
  8. #xiazai=/data/api/xiazai.htm 
  9. #shiting=/data/api/shiting.htm 
  10. xiazai=/tmp/xiazai.htm 
  11. shiting=/tmp/shiting.htm 
  12. log=/tmp 
  13.  
  14. # xiazai & shiting file line number 
  15. xznm=$(wc -l $yyxz|awk '{print $1}') 
  16. stnm=$(wc -l $yyst|awk '{print $1}') 
  17.  
  18. # random for xiazai & shiting 
  19. down=$[$RANDOM%$xznm+1] 
  20. listen=$[$RANDOM%$stnm+1] 
  21.  
  22. # get xiazai & shiting domain name 
  23. xzym=$(sed -n ${down}p $yyxz) 
  24. stym=$(sed -n ${listen}p $yyst) 
  25.  
  26. # write domain name into htm files. 
  27. echo -n $xzym > $xiazai 
  28. echo -n $stym > $shiting 
  29.  
  30. # out put logs 
  31. echo "The $xzym at `date +'%F %T'` be provided" >>/$log/xiazai_domain.log 
  32. echo "The $stym at `date +'%F %T'` be provided" >>/$log/shiting_domain.log 
  33.  
  34. exit 0 

语法检测是没问题的,但是执行的时候,就乱七八糟的。

 

上面最后一个错是因为exit0没有空格。看sed的结果是OK的,但是变量的内容就乱七八糟,让人很头痛。看下输出的结果

 

 

cat的结果很无语,命令提示符和结果重合了,看文件的内容,发现后面有个 ^M,这应该是DOS格式文件的换行符,LINUX里面的换行符应该是$才对。查看下文件格式发现脚本的是UNIX。但是再执行,还是同样的问题。然后我就把脚本手动的在LINUX里面输入了一遍,格式应该不会有问题了,但是还是同样的问题。

今天突然灵机一动,会不会是.txt文件格式的问题,而不是脚本格式的问题呢。所以试了一下

VI打开之后,在命令模式下,使用命令 set ff? 可以查看到文件格式

格式确实是dos,然后使用命令改一下

set ff=unix

 

把两个全改了,然后再执行脚本,一切OK。

 

 
  1. darling@00057:/tmp$ bash -x 123.sh  
  2. + yyxz=/data/ 
  3. + yyst=/data/ 
  4. + xiazai=/tmp/xiazai.htm 
  5. + shiting=/tmp/shiting.htm 
  6. + log=/tmp 
  7. ++ wc -l /data/ 
  8. ++ awk '{print $1}' 
  9. + xznm=10 
  10. ++ wc -l /data/ 
  11. ++ awk '{print $1}' 
  12. + stnm=10 
  13. + down=3 
  14. + listen=3 
  15. ++ sed -n 3p /data/ 
  16. + xzym= 
  17. ++ sed -n 3p /data/ 
  18. + stym= 
  19. + echo -n  
  20. + echo -n  
  21. ++ date '+%F %T' 
  22. + echo 'The  at 2012-06-07 11:50:40 be provided' 
  23. ++ date '+%F %T' 
  24. + echo 'The  at 2012-06-07 11:50:40 be provided' 
  25. + exit 0 

哎呀我的老天爷,终于搞定了。真不容易,折腾了我几天。

 

一个文件格式的错误,就能引起脚本运行的精神错乱,哎,吸取教训,以后有什么文件,要在LINXU里面写,拒绝从WIN写好之后,再传入LINUX.

 

时值2012年高考第一天,祝所有考生都能考出好成绩。




本文转自 gm100861 51CTO博客,原文链接:

本文发布于:2024-01-31 02:51:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170664067524801.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:脚本   奇妙   错误   Bash
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23