免费注册 查看新帖 |

Chinaunix

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

[其他] shell程序段缩写求助 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-27 01:06 |只看该作者 |倒序浏览
请问以下两段程序是一样的吗?

  1. if [ $(($et%100)) -eq 0 ] ; then
  2. if [ -f $nc ] ; then
  3. incr $nf
  4. else
  5. echo 1 > $nf
  6. touch $nc
  7. fi
  8. fi
复制代码
  1. [ $(($et%100)) -eq 0 ] && { [ -f $nc ] && incr $nf || { echo 1 > $nf ; touch $nc ; } }
复制代码
程序段中涉及到的变量及函数为:
  1. nf=/tmp/file1
  2. nc=/tmp/file2
  3. incr()
  4. {
  5. [ -f $1 ] && expr $(cat $1) + 1 > $1
  6. }
复制代码
我希望达到的效果是:
当$et为100的整数倍的时候:
有$nc 有$nf -> incr $nf
有$nc 没有$nf -> do nothing
没有$nc 没有$nf -> echo 1 > $nf

第一段程序没有问题可以达到这个效果;
但是执行第二段程序在 有$nc没有$nf的时候 还是执行了echo 1 > $nf
难道把第一段程序缩写成第二段程序后逻辑就错了吗?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2014-01-27 08:40 |只看该作者
你自己不是已经验证过了吗?

论坛徽章:
3
天蝎座
日期:2013-12-10 19:37:11酉鸡
日期:2014-08-04 20:05:38双鱼座
日期:2014-08-09 21:53:54
3 [报告]
发表于 2014-01-27 09:22 |只看该作者
本帖最后由 欧阳西风 于 2014-01-27 09:22 编辑

里面的
  1. [ -f $nc ] && incr $nf || { echo 1 > $nf ; touch $nc ; }
复制代码
实际执行过程应该相当于
  1. ([ -f $nc ] && incr $nf) || { echo 1 > $nf ; touch $nc ; }
复制代码
吧,所以只要是||左边的执行过程返回值不是0,就会执行echo 1 > $nf这一段。

所以我觉着要使incr $nf不影响||左边的返回值,那么我们应该使这一句一直返回0,个人意见可以做如下修改
  1. [ -f $nc ] && (incr $nf || [ 1 ]) || { echo 1 > $nf ; touch $nc ; }
复制代码
我也是shell新手,如果有不对的地方请大家指正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP