Bash脚本莫名奇妙的错误

2024-01-05 05:50
文章标签 错误 脚本 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/cdn/xiazai.txt 
  7. yyst=/data/cdn/shiting.txt 
  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/cdn/xiazai.txt 
  3. yyst=/data/cdn/shiting.txt 
  4. xiazai=/tmp/xiazai.htm 
  5. shiting=/tmp/shiting.htm 
  6. log=/tmp 
  7. ++ wc -l /data/cdn/xiazai.txt 
  8. ++ awk '{print $1}' 
  9. xznm=10 
  10. ++ wc -l /data/cdn/shiting.txt 
  11. ++ awk '{print $1}' 
  12. stnm=10 
  13. down=3 
  14. listen=3 
  15. ++ sed -n 3p /data/cdn/xiazai.txt 
  16. xzym=http://nyl.gpix4y.yymommy.com 
  17. ++ sed -n 3p /data/cdn/shiting.txt 
  18. stym=http://y3ek.otw.hotchanson.com 
  19. + echo -n http://nyl.gpix4y.yymommy.com 
  20. + echo -n http://y3ek.otw.hotchanson.com 
  21. ++ date '+%F %T' 
  22. + echo 'The http://nyl.gpix4y.yymommy.com at 2012-06-07 11:50:40 be provided' 
  23. ++ date '+%F %T' 
  24. + echo 'The http://y3ek.otw.hotchanson.com at 2012-06-07 11:50:40 be provided' 
  25. + exit 0 

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

 

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

 

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




本文转自 gm100861 51CTO博客,原文链接:http://blog.51cto.com/gm100861/891125

这篇关于Bash脚本莫名奇妙的错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571850

相关文章

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

CentOS 7 YUM源配置错误的解决方法

《CentOS7YUM源配置错误的解决方法》在使用虚拟机安装CentOS7系统时,我们可能会遇到YUM源配置错误的问题,导致无法正常下载软件包,为了解决这个问题,我们可以替换YUM源... 目录一、备份原有的 YUM 源配置文件二、选择并配置新的 YUM 源三、清理旧的缓存并重建新的缓存四、验证 YUM 源

python3 pip终端出现错误解决的方法详解

《python3pip终端出现错误解决的方法详解》这篇文章主要为大家详细介绍了python3pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下... 目录前言一、查看是否已安装pip二、查看是否添加至环境变量1.查看环境变量是http://www.cppcns

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三