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

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去