Значение результатов команды if

Я довольно новичок в Ubuntu Linux, скажем, весь Linux, потому что я установил его несколько дней назад. Прошу прощения за мои ошибки в использовании английского, потому что я живу в Нидерландах.

Ну, я пытался заняться программированием, писать сценарий, но я столкнулся с проблемой, которую я пока не смог решить. Ну, я писал сценарий, и я хочу, чтобы этот сценарий автоматически установил несколько вещей для меня. Ну, я делал и пытался сделать как можно меньше гнезд, и я закончил свой сценарий, но я подумал. Почему бы мне не попытаться вставить несколько строк, которые проверяют, правильно ли установлены программы. Поэтому я удивился, как я могу это сделать, и я придумал следующее:

Поскольку я новичок в программировании, я хотел, чтобы он был настолько продвинутым, насколько мог сам. Поэтому я решил попробовать поработать с функциями оболочки. Эти функции проверяют наличие правильного файла, и результатом этих функций должно быть значение, которое я могу использовать позже. Вот пример:

function isitthere
{
if [ -f <thefile> ]; then
true
else
false
fi
}

if [ $(isitthere) = "true" ]; then
echo "Your program is properly installed"
else
echo "Your program isn't properly installed.
fi

В этом примере true и false мои значения, и, как вы видите, я пытаюсь повторно использовать их во второй команде. Я знаю, что это можно сделать гораздо проще, но я хочу знать, возможно ли это, и если возможно, то как. Потому что в одной части моего сценария сделать это так, как это намного проще. Есть ли способ, которым вы можете присвоить значение вашей команде if и использовать это значение позже в вашей следующей команде if? Благодаря.

1
задан 26 April 2014 в 19:55

3 ответа

Существует много способов сделать это.

  1. Используйте встроенные функции оболочки. Команды (и функции) имеют значения выхода. Обычно, значение выхода 0 означает, что команда была успешна и значение> 0 средств, которые это привело к сбою. Это проверяется оболочкой, когда Вы используете || или && операторы. Так, для выполнения команды, только если предыдущий был успешен Вы будете использовать &&, ro выполняют его, если предыдущее не было успешно, Вы используете ||. Например:

    $ foo
    The last command was succesful
    echo 'foo' && echo "The last command was succesful"
    

    При использовании команды, которая не существует, она, очевидно, перестанет работать:

     $ echooo 'foo' && echo "The last command was succesful"
     echooo: command not found
    

    Обратите внимание, что второе сообщение не печатается. Если Вы используете || вместо этого:

    $ echooo 'foo' || echo "The last command failed"
    echooo: command not found
    The last command failed
    

    Можно объединить их в функцию оболочки:

    function isitthere
    {
        [ -f thefile ]
    }
    
    isitthere && echo "The file exists" || echo "the file does not exist"
    

    test оператор (также известный как [ ]) возвращает значение выхода 0 на успехе и 1 при отказе. Это означает, что Ваша функция может быть упрощена до вышеупомянутого.

  2. Используйте return команда. Это - на самом деле точно то же как пример выше, я просто заявляю это более явно. Это также позволяет Вам возвращать более сложные значения для различных случаев сбоя.

    function isitthere
    {
        if [ -f <thefile> ]; then
            return 0
        else
            return 1
        fi
    }
    
    if [ $(isitthere) ]; then
        echo "Your program is properly installed"
    else
        echo "Your program isn't properly installed.
    fi
    

    Я использовал тот же синтаксис в качестве Вас для иллюстрирования, но это могло быть сокращено к

    isitthere && echo "Your program is properly installed" || echo "Your program isn't properly installed."
    
  3. Имейте свою функциональную печать что-то к стандартному выводу и затем действуйте соответственно.

    function isitthere
    {
        [ -f thefile ] && echo yes || echo no
    }
    
    if [ $(isitthere) = "yes" ];
    then
        echo "Your program is properly installed"
    else
        echo "Your program isn't properly installed."
    fi
    

    В этом примере мы используем стандартный вывод функции и не ее возвращаемого значения. Для получения вывода команды (или функция), необходимо использовать замену команды. Это позволяет Вам выполнять команду и сохранять вывод как переменную. Например,

    $ foo=$(echo bar)
    $ echo $foo
    bar
    

    Так, тест if [ $(isitthere) = "yes" ] проверки, был ли вывод functin yes и действия соответственно.


Обратите внимание, что я использовал обоих [ -f thefile ] && echo yes || echo no и более сложное

if [ -f <thefile> ]; then
    return 0
else
    return 1
fi

Эти два в основном эквивалентны, я использовал обоих только для иллюстрирования этого. Можно использовать, какой бы ни Вы предпочитаете.

0
ответ дан 26 April 2014 в 19:55

Сохраните его простым; это работает хорошо (протестированный в Ubuntu 12.04):

#!/bin/bash

function isitthere
{
    [ -f TheFile ]
}

if isitthere; then
    echo "Your program is properly installed."
else
    echo "Your program isn't properly installed."
fi
0
ответ дан 26 April 2014 в 19:55

Приветствуйте голландского товарища!

Вы могли использовать что-то вроде этого:

result=isitthere

Здесь Вы присваиваете возвращаемое значение своей функции isitthere к переменной result. Эта переменная теперь содержит, в этом случае, true или false. Можно всегда получать значение result использование $result.

Однако, если Вы хотите поймать вывод (STDOUT) Вашей функции (например, если Вы используете echo внутренняя часть Ваша функция) необходимо использовать:

result=$(isitthere)
0
ответ дан 26 April 2014 в 19:55

Другие вопросы по тегам:

Похожие вопросы: