在shell脚本中迭代for循环

时间:2014-09-03 21:41:22

标签: linux bash shell

我有一个使用for循环的简单脚本,我想获取变量的值并将其分配给另一个命令并终止屏幕。  该脚本为

#!/usr/bin/sh/
echo 'I am going to kill the screens now';
for j in $(seq 1 1 10)
do
    i=$(grep -oP '.*?(?=\.)');
    echo $i
    screen -S $i -p 0 -X quit 
done <file1.txt
echo 'exiting...'

FILE1.TXT

There are screens on:

    4974.eth2   (Detached)
    5105.eth11  (Detached)
    4990.eth3   (Detached)
    5006.eth5   (Detached)
    5054.eth8   (Detached)
    5070.eth9   (Detached)
    5038.eth7   (Detached)
    5022.eth6   (Detached)
8 Sockets in /var/run/screen/S-root.

所以在这里,我迭代10行并在句点(。)之前分配i = what的值。例如。 4974。然后将4974放入屏幕命令并将其删除。这里的问题是,它是一次读取和grepping所有行,并且i的值在屏幕命令中放置为4974 5105 4990 5006 5054 5070 5038 5022,显然它找不到像这样的屏幕ID没有杀死任何屏幕。 我如何迭代循环,以便一次只需要一个id {value = i=4974的值,并将其放在屏幕命令中,以便它将它杀死它。 如果您正确理解我的问题,请告诉我。

2 个答案:

答案 0 :(得分:1)

试试这个:

awk -F'[. ]+' '/Detached/ {print $2}' file.txt | while read i
do
    echo "$i"
    screen -S "$i" -p 0 -X quit 
done

答案 1 :(得分:1)

不是迭代计数器,而是直接迭代结果:

set -f # disable globbing, so globs in grep's output aren't expanded
echo 'I am going to kill the screens now' >&2
for i in $(grep -oP '.*?(?=\.)'); do
    echo "$i"
    screen -S "$i" -p 0 -X quit 
done <file1.txt
echo 'exiting...' >&2
相关问题