免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9279 | 回复: 17

shell中引用while中的变量 [复制链接]

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
发表于 2012-02-08 12:08 |显示全部楼层
是这样,目前有一个shell脚本中有一个while循环,里面设置有一个变量A实现累加结果的作用

我想要在循环外面取最后的A的值,应该怎么做?请教高手

---------------------------------------------------
echo "a b c"|while read i
do
        echo $i
        sum+=$i
done
echo =======$sum===========
----------------------------------------------------

谢谢!~

论坛徽章:
0
发表于 2012-02-08 12:29 |显示全部楼层
  1. while read i; do echo $i; sum+=$i; done<<<"a b c";echo $sum
复制代码

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
发表于 2012-02-08 13:05 |显示全部楼层
回复 2# yangkyo821


    谢谢!

    如果前面有管道呢?应该怎么处理?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2012-02-08 13:26 |显示全部楼层
回复 3# Dannysd


    使用命名管道mkfifo

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
发表于 2012-02-08 13:48 |显示全部楼层
回复 4# yinyuemi


    不会调用额,请yinyuemi明细一下吧,谢谢!
----------------------------------------------------------------------------------
#!/bin/bash
rm -rf ./TMPFILE
mkfifo TMPFILE
echo "a b c"|while read i
do
        echo $i00 >> TMPFILE
done

ls ./TMPFILE
------------------------------------------------------------------------------------
运行后退不出来,Ctrl + c 中断后提示:TMPFILE: Interrupted system call

不懂额,请yinyuemi能不能详解一下,多谢!~

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2012-02-08 14:14 |显示全部楼层
本帖最后由 yinyuemi 于 2012-02-08 14:37 编辑

回复 5# Dannysd

大致意思:

  1. mkfifo pipe;
  2. exec 3<>pipe;  #fd3 指向pipe

  3. echo "a b c" |while read line1 line2
  4. do
  5. echo $line1 >&3 # 写入fd3
  6. done

  7. read -u3 var #读取变量
  8. echo $var
  9. rm pipe;
  10. exec 3>&-
复制代码

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
发表于 2012-02-08 18:17 |显示全部楼层
回复 6# yinyuemi


    多谢,yinyuemi详解!

    其实任务没有那么复杂,是我理解有问题,不过还是谢谢你的方法,虽然第一次用,不过长真知识啊!!

    再次感谢!~

论坛徽章:
0
发表于 2012-02-08 20:42 |显示全部楼层
这里不是可以不用管道吗?为什么非要用管道?

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
发表于 2012-02-09 09:18 |显示全部楼层
回复 8# xiaopan3322


    因为是前面的不确定,比如说开了多少个端口,这个是没有办法固定的,所以想到了这样的方式!
  
    谢谢,xiaopan3322

    另外,不知道xiaopan3322还有没有更好的办法?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2012-02-09 09:26 |显示全部楼层
回复 1# Dannysd


    sum=$(awk '{for(i=1;i<=NF;i++)sum+=$i}{print sum;sum=0}' <<<"a b c")
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP