免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2129 | 回复: 7
打印 上一主题 下一主题

[数值计算] 求助关于条件语句里数值比较的,请问该怎么解决,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-21 22:40 |只看该作者 |倒序浏览
本帖最后由 lbbei 于 2015-06-22 17:18 编辑





问题解决,不是语法问题,是WINdows和Liunx的格式问题。最后还是想问下:shell里 条件语句怎么直接比较数值?还要转成字符串,挺不理解的。









从文件里读出一个数值,有正有负带小数, 判断读出来的这个数是否小于0,是,取其绝对值,运行一段程序。否,运行另一段程序。可是下面的程序怎么总是不对呢? 总是提示:而且是比程序行(X行)多1处, lineX+1:syntax error: unexpected end of file.     请高手帮忙解惑,原脚本运行是没有问题的,自从加了下面一段以后就总是提示错误。

sttime=`saclhdr -O ${STA}.${YEAR}.${DAY}.bbz`
edtime=`echo "$sttime+87000"|bc`  
echo   "*********sttime= $sttime ,,,  edtime= $edtime **********"
bi=`awk 'BEGIN{print int('$sttime')}'`  ##########这里做的还是字串比较,能不能直接进行数值比较??
if [ "$bi" -ge 0 ]; then
sac<<eof
。。。。
q
eof
  else  
sttime=`expr 0 -$sttime`                  ###########好像这句也不对,echo ${sttime#-}  这样去掉-号了
sac<<eof
。。。
q
eof
fi                                                     ###########第X行


现在两个小问题都找到笨办法解决了,可是怎么还是    line X+1: syntax error: unexpected end of file
呢?没找到哪里有语法错误了啊.

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
2 [报告]
发表于 2015-06-22 01:22 |只看该作者
本帖最后由 songyc_2015 于 2015-06-22 01:23 编辑

回复 1# lbbei
sttime=`expr 0 - $sttime`
这里少了空格,如果还报错建议用set -x调试。。。。。

论坛徽章:
0
3 [报告]
发表于 2015-06-22 09:38 |只看该作者
本帖最后由 lbbei 于 2015-06-22 10:16 编辑

   楼上的,不对.             echo ${sttime#-}  这样去掉-号了



现在两个小问题都找到笨办法解决了,可是怎么还是    line X+1: syntax error: unexpected end of file
呢?没找到哪里有语法错误了啊

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2015-06-22 10:37 |只看该作者
回复 3# lbbei

set -x


if [ "$b" -ge 0 ]; then
> echo "B小于0  "
> else echo "B大于0 "
> fi
B0   <==??

论坛徽章:
0
5 [报告]
发表于 2015-06-22 10:50 |只看该作者
回复 4# jason680


    我说的是下面的那段程序,上面的是我自己测试的小段,那个没问题。

我不知道还要怎么描述清楚
1、你看的那段::######这里做的还是字串比较,能不能直接进行数值比较??

2、从文件里读出一个数值,有正有负带小数, 判断读出来的这个数是否小于0,是,取其绝对值,运行一段程序。否,运行另一段程序。可是下面的程序怎么总是不对呢? 总是提示:而且是比程序行(X行)多1处, lineX+1:syntax error: unexpected end of file.     请高手帮忙解惑,原脚本运行是没有问题的,自从加了下面一段以后就总是提示错误。

3、现在两个小问题都找到笨办法解决了,可是怎么还是    line X+1: syntax error: unexpected end of file
呢?没找到哪里有语法错误了啊


还不够清楚吗?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2015-06-22 11:15 |只看该作者
回复 5# lbbei

1 help/debug it by yourself
  set -x

2. help us to help you
http://bbs.chinaunix.net/thread-4138810-1-1.html

论坛徽章:
0
7 [报告]
发表于 2015-06-22 12:29 |只看该作者
本帖最后由 lbbei 于 2015-06-22 12:33 编辑

回复 6# jason680


全部程序是这样的,请高手看看是哪里的语法有问题。运行结果(程序90行):程序名: line 91: syntax error: unexpected end of file

    #!/bin/bash
MYPWD=`pwd`
stpwd=97   
newpwd=97time
cd "$MYPWD"/"$stpwd"   
for YEAR in *   
do
mkdir "$MYPWD"/"$newpwd"/"$YEAR"
cd "$MYPWD"/"$stpwd"/"$YEAR"
for DAY in `ls -d */ 2>/dev/null|sed 's/\/$//'`
  do
  nextday1=`echo "$DAY+1"|bc`                 
  yesterday=`echo "$DAY-1"|bc`            
  nextday="$nextday1"
    if [ -d ""$MYPWD"/"$stpwd"/"$YEAR"/"$nextday"" ];  then

  mkdir
  cd "$MYPWD"/"$stpwd"/"$YEAR"/"$DAY"
#######################################a
  for STA in *
  do
  mkdir
  cd
  cp
  cp
  cp
gsac << eof
......
eof
###############a
sac << eof
.....
eof
sttime=`saclhdr -O ${STA}.${YEAR}.${DAY}.bbz` #提取数据里的带小数值,有正有负.  STA下的文件*bbz
edtime=`echo "$sttime+87000"|bc`
bi=`awk 'BEGIN{print int('$sttime')}'`     取整
if [ "$bi" -ge 0 ]; then
sac<<eof
.......
eof
  else  
sttime=`echo ${sttime#-}`
sac<<eof
.......
eof
fi
  done
  else
  fi
done
done

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2015-06-22 13:13 |只看该作者
shell基础第十八篇-控制流结构
http://bbs.chinaunix.net/thread-1820329-1-1.html

shell学习基础第十九篇-shell函数
http://bbs.chinaunix.net/thread-1820454-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP