bashif-statementtimeat-job

At job asking for time


#!/bin/bash

at now +1 minutes -f ./test.sh

logFile="/home/.../testLog.txt"

time1="114000"
time2="153000"
currentTime=`date +"%H%M%S"`

echo "" >> "$logFile"
date >> "$logFile"
echo "$currentTime" >> "$logFile"
echo "" >> "$logFile"


if [[ "$currentTime" < "$time1" || "$currentTime" > "$time2" ]]
then
    echo "case1" >> "$logFile"
else
    echo "case2" >> "$logFile"
fi

This script is saved in a file called test.sh. When I execute it at for example 5 pm it writes case1 into my log file. But for each subsequent at call (which takes place every minute) the script writes case2 into my log file. Can you explain why?


Solution

  • It's failing because at runs its jobs with sh while your script requires bash.

    You can confirm this by looking at the errors you're currently discarding. You'd find that the if condition gives something like this:

    sh: cannot open 114000: No such file
    sh: [[: not found
    sh: 111405: not found
    

    and due to this failure it will write case2 whenever it's being scheduled by at instead of executed directly.

    Use a loop or cron instead.