我有一个使用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
的值,并将其放在屏幕命令中,以便它将它杀死它。
如果您正确理解我的问题,请告诉我。
答案 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