在while循环

时间:2015-09-29 13:46:51

标签: bash while-loop

我有一个脚本,我试图每秒捕获一次屏幕截图60秒,并将文件保存为date / time.jpg但是它只创建一个文件,如何在内部进行时间更新循环?

#!/bin/bash
now=$(date +"%d%m%Y-%H%M%S")

DISPLAY=:1 firefox http://www.bbc.co.uk > /dev/null 2>&1 &

SECONDS=0;
while sleep 1 && ((SECONDS <= 60)); do
DISPLAY=:1 import -window root $now.jpg

done

输出

+ SECONDS=0
+ sleep 1
+ DISPLAY=:1
+ firefox http://www.bbc.co.uk
+ (( SECONDS <= 60 ))
+ DISPLAY=:1
+ import -window root -resize 1024x768 29092015-144315.jpg
+ sleep 1
+ (( SECONDS <= 60 ))
+ DISPLAY=:1
+ import -window root -resize 1024x768 29092015-144315.jpg
+ sleep 1
+ (( SECONDS <= 60 ))
+ DISPLAY=:1
+ import -window root -resize 1024x768 29092015-144315.jpg
+ sleep 1

而不是使用时间作为文件名,我不介意使用递增的数字,即1.jpg 2.jpg 3.jpg 4.jpg

1 个答案:

答案 0 :(得分:0)

now变量分配的值仅在评估此行时执行一次,因此每次要捕获图片时都需要对其进行评估。

试试这段代码:

#!/bin/bash

DISPLAY=:1 firefox http://www.bbc.co.uk > /dev/null 2>&1 &

SECONDS=0;
while sleep 1 && ((SECONDS <= 60)); do
now=$(date +"%d%m%Y-%H%M%S")
DISPLAY=:1 import -window root $now.jpg

done

如果你想使用增加数字而不是当前日期保存文件,你可以这样做:

#!/bin/bash

DISPLAY=:1 firefox http://www.bbc.co.uk > /dev/null 2>&1 &

SECONDS=0;
NUM_OF_FILE=0;
while sleep 1 && ((SECONDS <= 60)); do
NUM_OF_FILE=$((NUM_OF_FILE+1))
DISPLAY=:1 import -window root $NUM_OF_FILE.jpg

done