标签: while-loop

读取行循环后的Shell脚本在第一行后停止

我有以下shell脚本.目的是循环到目标文件的每一行(其路径是脚本的输入参数)并对每一行进行操作.现在,它似乎只适用于目标文件中的第一行,并在该行被处理后停止.我的剧本有什么问题吗?

#!/bin/bash
# SCRIPT: do.sh
# PURPOSE: loop thru the targets 

FILENAME=$1
count=0

echo "proceed with $FILENAME"

while read LINE; do
   let count++
   echo "$count $LINE"
   sh ./do_work.sh $LINE
done < $FILENAME

echo "\ntotal $count targets"
Run Code Online (Sandbox Code Playgroud)

do_work.sh,我运行了几个ssh命令.

ssh bash shell while-loop

86
推荐指数
4
解决办法
5万
查看次数

如何将输入传递给Bash while循环并在循环结束后保留​​变量

Bash允许使用: cat <(echo "$FILECONTENT")

Bash还允许使用: while read i; do echo $i; done </etc/passwd

结合前两个可以使用: echo $FILECONTENT | while read i; do echo $i; done

最后一个问题是它创建了子shell,而在while循环结束后,变量i不再被访问.

我的问题是:

如何实现这样的目标:while read i; do echo $i; done <(echo "$FILECONTENT")或者换句话说:我怎样才能确定i循环中存活?

请注意我知道封闭while语句{}但这并不能解决问题(想象一下你想在函数中使用while循环并返回i变量)

bash stdin pipe while-loop

80
推荐指数
2
解决办法
8万
查看次数

如何在Java中退出while循环?

在Java中退出/终止while循环的最佳方法是什么?

例如,我的代码目前如下:

while(true){
    if(obj == null){

        // I need to exit here

    }
}
Run Code Online (Sandbox Code Playgroud)

java exit break while-loop

77
推荐指数
3
解决办法
42万
查看次数

在不使用while循环的情况下找到最内部的异常?

当C#抛出异常时,它可能有一个内部异常.我想要做的是获取最内部的异常,或者换句话说,没有内部异常的叶子异常.我可以在while循环中执行此操作:

while (e.InnerException != null)
{
    e = e.InnerException;
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一些我可以使用的单行代替.

.net c# exception-handling exception while-loop

76
推荐指数
5
解决办法
4万
查看次数

'做'而'与'同时'

可能重复:
虽然与Do同时
我应该何时使用do-while而不是while循环?

我已经编程了一段时间(2年的工作+ 4.5年的学位+ 1年的大学预科课程),而且我从未使用过do-while循环而不是被迫参加编程入门课程.如果我从未遇到过如此根本的事情,我会越来越感觉我编程错了.

可能是因为我没有遇到正确的情况吗?

有哪些例子需要使用do-while而不是一段时间?

(我的学校教育几乎都是用C/C++编写的,我的工作是在C#中,所以如果有另一种语言绝对有意义,因为do-whiles的工作方式不同,那么这些问题并不适用.)

澄清......我知道a while和a 之间的区别do-while.在检查退出条件然后执行任务时.do-while执行任务然后检查退出条件.

c c# c++ while-loop do-while

75
推荐指数
9
解决办法
10万
查看次数

对于C编程时的vs.

有三个环在C: ,for,whiledo-while.他们之间有什么区别?

例如,似乎几乎所有while语句都可以被for语句替换,对吧?那么,使用的优势是什么while

c loops for-loop while-loop

74
推荐指数
6
解决办法
13万
查看次数

如何用击键杀死while循环?

我正在读取串行数据并使用while循环写入csv文件.我希望用户能够在他们认为已经收集到足够的数据后杀死while循环.

while True:
    #do a bunch of serial stuff

    #if the user presses the 'esc' or 'return' key:
        break
Run Code Online (Sandbox Code Playgroud)

我使用opencv做了类似的事情,但它似乎没有在这个应用程序中工作(我真的不想为此函数导入opencv)...

        # Listen for ESC or ENTER key
        c = cv.WaitKey(7) % 0x100
        if c == 27 or c == 10:
            break
Run Code Online (Sandbox Code Playgroud)

所以.如何让用户摆脱循环?

另外,我不想使用键盘中断,因为脚本需要在while循环终止后继续运行.

python break while-loop

71
推荐指数
6
解决办法
14万
查看次数

为什么管道输入"读取"仅在输入"while read ..."构造时有效?

我一直在尝试从程序输出中读取环境变量的输入,如下所示:

echo first second | read A B ; echo $A-$B 
Run Code Online (Sandbox Code Playgroud)

结果是:

-
Run Code Online (Sandbox Code Playgroud)

A和B都是空的.我读到了bash在子shell中执行管道命令,并且基本上阻止了管道输入读取.但是,以下内容:

echo first second | while read A B ; do echo $A-$B ; done
Run Code Online (Sandbox Code Playgroud)

似乎工作,结果是:

first-second
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这里的逻辑是什么吗?是while...... done构造中的命令实际上是在同一个shell中执行echo而不是在子shell中执行?

bash pipe while-loop piping

69
推荐指数
3
解决办法
3万
查看次数

"条件"时"无所事事"

在浏览JavaJ版本的ForkJoinPool的代码时(我从Java 7中进行了一些有趣的更改),我遇到了这个构造(这里):

do {} while (!blocker.isReleasable() &&
             !blocker.block());
Run Code Online (Sandbox Code Playgroud)

我正在努力为什么你会这样写,而不是只是

while (!blocker.isReleasable() &&
       !blocker.block());
Run Code Online (Sandbox Code Playgroud)

它只是一个语义/可读性选择,因为你可以读取第一个结构do "nothing" while "conditions"吗?或者我还缺少一些额外的好处?

java while-loop do-while

69
推荐指数
3
解决办法
1万
查看次数

如何使用C预处理器编写while循环?

我从教育/黑客的角度来问这个问题,(我真的不想这样编码).

是否可以仅使用C预处理程序指令实现while循环.我知道宏不能递归扩展,那么如何实现呢?

c while-loop c-preprocessor

66
推荐指数
7
解决办法
5万
查看次数

标签 统计

while-loop ×10

bash ×3

c ×3

break ×2

c# ×2

do-while ×2

java ×2

pipe ×2

.net ×1

c++ ×1

c-preprocessor ×1

exception ×1

exception-handling ×1

exit ×1

for-loop ×1

loops ×1

piping ×1

python ×1

shell ×1

ssh ×1

stdin ×1