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

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结