Я довольно новичок в 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? Благодаря.
Существует много способов сделать это.
Используйте встроенные функции оболочки. Команды (и функции) имеют значения выхода. Обычно, значение выхода 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 при отказе. Это означает, что Ваша функция может быть упрощена до вышеупомянутого.
Используйте 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."
Имейте свою функциональную печать что-то к стандартному выводу и затем действуйте соответственно.
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
Эти два в основном эквивалентны, я использовал обоих только для иллюстрирования этого. Можно использовать, какой бы ни Вы предпочитаете.
Сохраните его простым; это работает хорошо (протестированный в 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
Приветствуйте голландского товарища!
Вы могли использовать что-то вроде этого:
result=isitthere
Здесь Вы присваиваете возвращаемое значение своей функции isitthere
к переменной result
. Эта переменная теперь содержит, в этом случае, true
или false
. Можно всегда получать значение result
использование $result
.
Однако, если Вы хотите поймать вывод (STDOUT) Вашей функции (например, если Вы используете echo
внутренняя часть Ваша функция) необходимо использовать:
result=$(isitthere)