免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1095 | 回复: 3

[文本处理] 赋值好的数组,第二次调用时为0 [复制链接]

论坛徽章:
0
发表于 2018-09-23 00:50 |显示全部楼层
为什么我第一次调用iops_numjobs_1[0]和iops_numjobs_2[0]和iops_numjobs_3[0]和iops_numjobs_4[0]正常输出;
第二次在循环外调用时则为0了呢,就好像从未赋值过。
  1. function numjobs_4_result()
  2. {
  3. printf "have turn to numjobs_4_result"
  4. for rw in randwrite randread write read
  5. do
  6.   for bs in 4k 16k 128k 1M
  7.     do
  8.       for iodepth in 1 8
  9.         do
  10.           for size in 30% 50% 85%
  11.             do
  12.               #for dev in `lsscsi|awk -F '/' '{print $NF}'`
  13.               for dev in sdz
  14.                do
  15.                   ls $Cur_Dir/result/dev/$dev|grep "^$rw-$bs-4-$iodepth-$size--log2_iops."|cut -d "." -f 2 |while read line
  16.                    do
  17.                      log_num=`echo $line%4|bc`
  18.                      if [ "$log_num" == 1 ];then
  19.                        iops_numjobs_1=($(awk -F ',' '{print $2}' $Cur_Dir/result/dev/$dev/$rw-$bs-4-$iodepth-$size--log2_iops.$line.log))
  20.                      elif [ "$log_num" == 2 ];then
  21.                        iops_numjobs_2=($(awk -F ',' '{print $2}' $Cur_Dir/result/dev/$dev/$rw-$bs-4-$iodepth-$size--log2_iops.$line.log))
  22.                      elif [ "$log_num" == 3 ];then
  23.                        iops_numjobs_3=($(awk -F ',' '{print $2}' $Cur_Dir/result/dev/$dev/$rw-$bs-4-$iodepth-$size--log2_iops.$line.log))
  24.                      elif [ "$log_num" == 0 ];then
  25.                        iops_numjobs_4=($(awk -F ',' '{print $2}' $Cur_Dir/result/dev/$dev/$rw-$bs-4-$iodepth-$size--log2_iops.$line.log))
  26.                      else
  27.                        printf "something wrong \n"
  28.                      fi
  29.                                         [fly]echo -e "${iops_numjobs_1[0]}" "${iops_numjobs_2[0]}" "${iops_numjobs_3[0]}" "${iops_numjobs_4[0]}"[/fly][fly]此时调用可正常输出内容[/fly]
  30.                    done
  31.                      echo -e "${iops_numjobs_1[0]}" "${iops_numjobs_2[0]}" "${iops_numjobs_3[0]}" "${iops_numjobs_4[0]}"[fly]此时调用则无数值了[/fly]
  32.                   for i in {0..30};
  33.                    do
  34.                    let iops_total[$i]=iops_numjobs_1[$i]+iops_numjobs_2[$i]+iops_numjobs_3[$i]+iops_numjobs_4[$i]
  35.                    done
  36.                  printf "%s\n" "${iops_total[@]}" |tee $Cur_Dir/result/$dev-$rw-$bs-4-$iodepth-$size-iops.xls
  37.                done
  38.            done
  39.       done
  40.    done
  41. done
  42. }
复制代码


论坛徽章:
0
发表于 2018-09-24 09:32 |显示全部楼层
ls $Cur_Dir/result/dev/$dev|grep "^$rw-$bs-4-$iodepth-$size--log2_iops."|cut -d "." -f 2 |while read line
这一行需要更改为for 循环,而不是while read 循环就可以了

论坛徽章:
0
发表于 2018-09-25 14:17 |显示全部楼层
为啥别的语言中,while 循环里的变量,while外可以读出。请问 这是特色还是坑?

论坛徽章:
28
ChinaUnix元老
日期:2015-02-02 08:55:392017金鸡报晓
日期:2017-01-10 15:13:29CU十四周年纪念徽章
日期:2018-08-29 22:12:2715-16赛季CBA联赛之深圳
日期:2018-09-20 12:21:09
发表于 2018-09-25 15:20 |显示全部楼层
xxx | while 的变量在subshell里面
http://www.tldp.org/LDP/abs/html/x17974.html#AVOIDSUBSHELL
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP