解决bash中while(或for或if)循环n次就跳出
高洛峰
高洛峰 2016-10-27 15:01:33
0
1
484

一个目录下有许多文件(且所有文件都是单行),找出其中含有字符串 NAME="configId"且只含有1个的、以.xml结尾的文件。匹配过后符合要求的文件中,取出任意5个拷贝到/tmp/five目录即可。

我的思路是先grep,然后用while判断等于1的,就拷贝到/tmp/five;循环执行5次,当大于5次就break。执行了该脚本,发现有问题,/tmp/five中只取到了一个文件。

for i in *.xml do num=`grep -o 'NAME="configId"' $i|wc -l` done=0 while [ "$num" -eq 1 ];do cp $i /tmp/five/ done=$(($done+1)) if [ "$done" -gt 5 ];then break fi done done


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen (1)
三叔
#!/bin/bash num=0 for i in $(ls *.xml) do if [ $num -ge 5 ]; then break fi count=$(grep -o 'NAME="configId"' ${i} | wc -l) if [ ${count} -eq 1 ]; then cp ${i} /tmp/five num=$(($num+1)) fi done

只能取出满足条件的前5个文件, 无法做到任意

另外你代码的几个问题

不应该取变量名为保留字(done)

你的while循环实际上轮了6次, 从done=0~5


    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!