Bash, сравнивая сохраненное "логическое" значение с чем? - PullRequest
3 голосов
/ 13 октября 2009

Я пытаюсь создать программу, которая принимает один аргумент, файл, а затем проверяет, что произошло с файлом через 60 секунд.Для этого мне нужно сохранить результат из -e $1 в переменной, а затем проверить его через 60 секунд.Кажется, я не могу заставить выражение if прислушиваться ко мне, и я знаю, что это неправильно.В целях тестирования этот скрипт просто распечатывает результат сравнения.С нетерпением жду рабочего примера, я не знаю, сколько версий я сделал для этой крошечной программы.Спасибо!Завтра, любая помощь очень ценится!

#!/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

1 Ответ

5 голосов
/ 13 октября 2009

Используйте $? специальную переменную оболочки для получения результата команды. Помните, что возвращаемое значение 0 означает true. Вот модифицированный скрипт

#!/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

Ваш оригинальный пример пытался сохранить буквальный вывод команды test в переменной onStartup. Буквенный вывод команды test представляет собой пустую строку, поэтому вы не видите никакого вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...