user138980
user138980

Reputation:

Bash comparing stored "boolean" value with what?

I'm trying to make a program that takes in one argument, a file, and then checks what has happened to the file 60 seconds later. To do this, I need to store the result from -e $1 in a variable and then check it 60 seconds later. I can not seem to be able to make the if expression listen to me, and I know it's wrong. For testing purposes this script just prints out immediately the result of the comparison. Looking forward to a working sample of this, I don't know how many versions I've made of this tiny program. Thanks! It's due tomorrow, any help is very much appreciated!

#!/bin/bash
onStartup=$(test -e $1) 
if [ -e "$1" ]; then
    unixtid1=$(date  +"%s" -r "$1") #To check if the file was edited. 
    echo $unixtid1
fi
sleep 3

#Here trying to be able to compare the boolean value stored in the
#start of the script. True/False or 1 or 0? Now, both is actually printed. 
if [[ $onStartup=1 ]]; then
    echo "Exists"
fi

if [[ $onStartup=0 ]]; then
    echo "Does not exists"
fi

Upvotes: 3

Views: 3444

Answers (1)

Alexander Pogrebnyak
Alexander Pogrebnyak

Reputation: 45576

Use $? special shell variable to get the result of the command. Remember that return value of 0 means true. Here is modified script

#!/bin/bash
test -e $1
onStartup=$?

if [ $onStartup -eq 0 ]; then
unixtid1=$(date  +"%s" -r "$1") #To check if the file was edited. 
echo $unixtid1
fi
sleep 3

#Here trying to be able to compare the boolean value stored in the
#start of the script. True/False or 1 or 0?
if [[ $onStartup -eq 0 ]]; then
echo "Exists"
else
echo "Does not exists"
fi

Your original example tried to store a literal output of the test command in the onStartup variable. The literal output of the test command is an empty string, that's why you did not see any output.

Upvotes: 4

Related Questions