奇怪的Bash脚本错误

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

有两个.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的,但是变量的内容就乱七八糟,让人很头痛。看下输出的结果

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索问题
, 文件
, 脚本
, echo
, data
htm
bash脚本、linux bash脚本、高级bash脚本编程指南、bash脚本入门、bash脚本编程,以便于您获取更多的相关知识。

时间: 2025-01-20 20:12:40

奇怪的Bash脚本错误的相关文章

《UNIX/Linux 系统管理技术手册(第四版)》——2.2 bash脚本编程

2.2 bash脚本编程 UNIX/Linux 系统管理技术手册(第四版) bash特别适合编写简单的脚本,用来自动执行那些以往在命令行输入的操作.在命令行用的技巧也能用在bash的脚本里,反之亦然,这让用户在bash上投入的学习时间获得了最大的回报.不过,一旦bash脚本超过了100行,或者需要的特性bash没有,那么就要换到Perl或者Python上了. bash脚本的注释以一个井号(#)开头,并且注释一直延续到行尾.和命令行中一样,可以把逻辑上的一行分成多个物理上的多行来写,每行末尾用反斜

source-bash -c 奇怪的结果,求助达人解疑

问题描述 bash -c 奇怪的结果,求助达人解疑 .test_profile内容如下: export TESTVAR=1111 eccho $TESTVAR 1 首先,在终端运行如下命令 export TESTVAR=2222 echo $TESTVAR 输出 2222 2 然后,在终端运行如下命令 bash -c "source .test_profile; echo ' ---- ' $TESTVAR"; 输出 1111 ---- 2222 为什么不是输出 1111 ---- 1

简洁的 Bash Programming 技巧续篇

简洁的 Bash Programming 技巧系列文章专门介绍 Bash 编程中一些简洁的技巧,帮助大家提高平时 Bash 编程的效率.继上一篇文章发布后,收到很多读者的反响,所以我决定继续将自己学到的一些新的技巧更新在这篇续篇中,当然也希望其它同学也能一起分享你们的技巧.续篇中有部分的内容已经偏离bash编程了,而是命令行下的技巧,题目我暂时不改,请见谅. 1. bash中alias的使用 alias其实是给常用的命令定一个别名,比如很多人会定义一下的一个别名: alias ll='ls -l

Bash漏洞那些事儿

英文原文链接,译文链接,原文作者:Troy Hunt ,译者:有孚 还记得Heartbleed漏洞吗?如果你相信今天这个铺天盖地的传言,那说明Shellshock和它是一类的,它的名字也同样令人畏惧(弹震症,一种精神疾病),就是缺了个酷点的LOGO而已(这些漏洞的市场部的人需要加把劲了).不过认真来讲,它还是有可能成为一个大麻烦的,正如上次heartbleed漏洞中我所做的那样,我希望能汇总出一些资料,这样对我自己来说,我能知道如何去解决这个问题,也让别人能在各种传闻里真正认识到它潜在的风险.

编写快速安全Bash脚本的建议

昨天我和一些朋友聊起Bash,我意识到:即使我已经使用Bash十多年了,现在还有一些基础的杂项,我理解的并不是很清晰. 像往常一样,我认为我应该写一个博文. 我们会包含: 一些bash基础知识("你怎么写一个for循环") 杂项事宜("总是引用你的bash变量") bash脚本安全提示("总是使用set -u") 如果你编写shell脚本,并且你没有阅读这篇文章中其他任何内容,你应该知道有一个shell脚本校验工具(linter),叫做 shel

linux bash中too many arguments问题的解决方法_linux shell

判断一个文件的内容是不是为空,使用语句: if test -z `cat filename` 当filename为空或者只有一行没有空格的字符串的时候,一切正常,反之,则会报:too many arguments,甚至是: binary operator expected之类的错误. 参考文章:http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html 原因分析:filename中的空格回车等迷惑了bash.如果

Linux系统中bash shell编程的10个基础问题讲解_linux shell

第1问:为何叫做shell?在介绍 shell 是什么东西之前,不妨让我们重新审视使用者与电脑的关系.我们知道电脑的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为"操作系统(Operating System)"的软件来控管,事实上,我们每天所谈的linux,严格来说只是一个操作系统,我们称之为"核心(kernel)".然而,从使用者的角度来说,使用者也没办法直接操作kernel,而是透过kernel的"外壳"程序,也

奇怪的回车换行问题_相关技巧

在类unix中,是\n (0x0A).以为没有什么大的问题,没想到,这次开发一个小程序,却让我对这个问题大为头痛. 首先发现这个问题是这样的: 我的这个程序采用的是Extjs+php的方式,通过ajax进行通讯.其中有个页面,如图: 两个文本框,一个text,一个textarea,当textarea中含有回车换行的时候,会出现脚本错误.后面发现是因为如果服务器端返回的字符串换行了,会造成js解析出现错误,可见js在解析json数据时候的语法还是和在本地定义的字符串变量的语法一致的.一个字符串不能

sqlplus / as sysdba无法登录的奇怪报错

最近看了一个问题,看问题的表现着实比较奇怪,困扰了我好一会儿. 问题的背景是帮助开发的同学解决一个数据库问题,最后问题解决之后,我想做一个操作系统级的检查,帮他们看看还有什么需要注意的地方.然后在命令行中国登陆到了这台数据库服务器,切换到oracle用户之后,查看到数据库实例为cytj,然后准备做一番检查. #ps -ef|grep smon root      3657 32596  0 17:37 pts/2    00:00:00 grep smon oracle    5433