Автор Тема: Помогите разобрать задачку на Bash  (Прочитано 2113 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн СергейDebian

Мы рассказали, что можно проверить код возврата внешней программы прямо в конструкции if при помощи if `program options arguments` (действия внутри if выполнятся, если программа закончилась с кодом 0). Однако это не всегда правда! Если запуск внешней программы выводит что-то в stdout, то в проверку if поступит именно этот вывод, а не код возврата! Вы можете убедиться в этом, написав простой bash-скрипт с использованием, например, if `pwd`.


Однако как быть, если хочется всё-таки запустить программу program, которая пишет что-то в stdout и потом выполнить какие-то действия если ее код возврата равен 0? Выберите все верные утверждения или правильно работающие конструкции if.

Примечание: во всех вариантах ответов, где есть кавычка, используется именно косая кавычка (`), а не обычная (') или двойная (").

Тест — Выберите один или несколько вариантов из списка
 
1) if `program > some_file.txt`            Как понять это ворожение?
2)Сначала запустить program, затем if [[ $? -eq 0 ]]
3) Ничего сделать нельзя
4) Сначала var=`program`, затем if [[ $var -eq 0 ]]
5) if [[ `program` -eq 0 ]]
 

Оффлайн moreplavatel

Re: Помогите разобрать задачку на Bash
« Ответ #1 : 07 Июля 2018, 22:14:57 »
а тебе о чем нибудь говорят такие выражения как функции, переменные, арифметические операторы, логическите операторы, циклы и т.д. ?
 

Оффлайн СергейDebian

Re: Помогите разобрать задачку на Bash
« Ответ #2 : 07 Июля 2018, 22:17:45 »
да говорят.я даже знаю что это такое и какой синтаксис а пользоваться этим чтото не как не получается
 

Оффлайн moreplavatel

Re: Помогите разобрать задачку на Bash
« Ответ #3 : 07 Июля 2018, 22:20:34 »
ну так нужно показывать примеры кода который ты пишешь.
тогда может и подскажут где ошибки.
 

Оффлайн СергейDebian

Re: Помогите разобрать задачку на Bash
« Ответ #4 : 07 Июля 2018, 22:29:15 »
Пытаюсь проверить первое вырожение. что не так?

#!/bin/bash

if `prog.sh > some_file.txt `
then
 echo "good"
else
 echo "bad"
fi
 

Оффлайн moreplavatel

Re: Помогите разобрать задачку на Bash
« Ответ #5 : 08 Июля 2018, 05:15:36 »
То что ты запускаешь действие в if вместо проверки, в if должна происходить только проверка на True, False.
Пример на существование файла.

True, файл существует, код 0:
[[ -f /etc/hosts ]]
kod=$?
echo "Код возврата $kod" > some_file.txt

if [[ $kod == 0 ]]; then
    echo "Правда, файл существует (True)"
else [[ $kod == 1 ]]
    echo "Ложь, файл не существует (False)"
fi

False, файл не существует, код 1:
[[ -f /etc/hostss ]]
kod=$?
echo "Код возврата $kod" > some_file.txt

if [[ $kod == 0 ]]; then
    echo "Правда, файл существует (True)"
else [[ $kod == 1 ]]
    echo "Ложь, файл не существует (False)"
fi

да говорят.я даже знаю что это такое и какой синтаксис а пользоваться этим чтото не как не получается

Какие языки программирования знаешь (php, может python )? Может на примере других языков будет понятнее.
 

Оффлайн СергейDebian

Re: Помогите разобрать задачку на Bash
« Ответ #6 : 08 Июля 2018, 12:23:15 »
здравствуйте!

Разобрался наконец. вчера уже поздно было не ответил сразу.
я в этом куске не как не мог сообразит if `prog.sh > some_file.txt ` тут оказывается должна была указанна программа которая возвращает результат, и потом записывает его в some_file.txt. А я указал имя этого же скрипта который написал...
 

Оффлайн moreplavatel

Re: Помогите разобрать задачку на Bash
« Ответ #7 : 08 Июля 2018, 12:39:08 »
if `prog.sh > some_file.txt ` тут оказывается должна была указанна программа которая возвращает результат
я думал это очевидно  :)
 

Оффлайн СергейDebian

Re: Помогите разобрать задачку на Bash
« Ответ #8 : 08 Июля 2018, 13:57:36 »
А ту как правильно сделать ?

Посмотрите на функцию из bash-скрипта:
counter ()  # takes one argument
{
  local let "c1+=$1"
  let "c2+=${1}*2"
}

Впишите в форму ниже строку, которую выведет на экран команда echo "counters are $c1 and $c2" если она находится в скрипте после десяти вызовов функции counter с параметрами сначала 1, затем 2, затем 3 и т.д., последний вызов с параметром 10.

я пишу так:
#!/bin/bash
i=0
c1=1
c2=1
for i in "seq 1 10";
do
counter ()
{
  local let "c1+=$1"
  let "c2+=${1}*2"
}
 echo "counters sre $c1 and $c2"
done
« Последнее редактирование: 08 Июля 2018, 14:58:02 от СергейDebian »
 

Оффлайн ogost

Re: Помогите разобрать задачку на Bash
« Ответ #9 : 08 Июля 2018, 14:45:21 »
Сергей, прячем все скрипты под тэг "код"!

Оффлайн moreplavatel

Re: Помогите разобрать задачку на Bash
« Ответ #10 : 08 Июля 2018, 14:48:57 »
переменной i значение присваивать не нужно, в нее попадает счетчик.
пример:
for i in `seq 1 10`; do
    echo $i
done

обрати внимание на кавычки в моем примере и в твоем коде.
дальше даже смотреть не стал, я подумал что ты и правда знаешь синтаксис, но оказалось что ... .
читай книги по bash, смотри видосы на ютубе.
если бы у тебя был вопрос как что то конкретное реализовать (написать/исправить) то другое дело.
ну а так, пересказывать учебники, объяснять как работает цикл for - ни вижу смысла, в тырнете полно инфы и примеров.

ну или пиши так, если с кавычками путаешься.
for i in $(seq 1 10); do
    echo $i
done
« Последнее редактирование: 08 Июля 2018, 14:57:10 от moreplavatel »
 

Оффлайн СергейDebian

Re: Помогите разобрать задачку на Bash
« Ответ #11 : 08 Июля 2018, 15:04:27 »
переписал как вы написали, результат выводится пустой..

как работает for я знаю.  выводит даже 10 раз но с1 и с2 пустые почемуто. не чего не считается
я так понимаю программа должна вывести на экран результат функции

Cообщение объединено 08 Июля 2018, 15:35:59
скажите хоть как это выражение читается  let "c2+=${1}*2"
let производит арифметические операции над числами и переменными
переменной 2 присваивается и прибавляется это ${1}*2
А это   ${1} как правильно читается?

Cообщение объединено 08 Июля 2018, 15:52:19
Если бы я все знал, наврятли бы стал задавать вопросы.
« Последнее редактирование: 08 Июля 2018, 15:52:19 от СергейDebian »
 

Теги:
     

    Помогите подобрать б/у ноут за 100-150$!

    Автор LionDeb

    Ответов: 3
    Просмотров: 1582
    Последний ответ 21 Сентября 2015, 00:17:46
    от LionDeb
    Ошибка (wxWidgets must be installed on your system.) -помогите разобраться.

    Автор temakonkin

    Ответов: 1
    Просмотров: 2816
    Последний ответ 21 Февраля 2015, 04:25:51
    от ihammers
    помогите выбрать счетчик

    Автор tubaltsevy

    Ответов: 8
    Просмотров: 1099
    Последний ответ 02 Сентября 2019, 16:46:49
    от qupl
    Помогите выбрать новую графиккарту

    Автор animegirl

    Ответов: 8
    Просмотров: 2150
    Последний ответ 16 Октября 2012, 19:09:19
    от animegirl
    помогите настроить доступ к папке с хостом var/www, (через samba)

    Автор Кавалерия

    Ответов: 12
    Просмотров: 4377
    Последний ответ 06 Апреля 2016, 03:25:19
    от ihammers