LINUX.ORG.RU

Как добавить в скрипт цикл if?

 ,


0

1

Основной рабочий скрипт

ping -c 1 ubuntu.com > /dev/null
if [ $? -eq 0 ]; then

   date=$(date -u +'%d%m%Y')
   for n in $(echo one two three); do
       echo $n
   done
   for n in $(echo bullseye jammy xenial); do

       if [ $n != bullseye ]; then
         echo "it's ubuntu"
       else
         echo "it's debian"
       fi

   done
fi

Дополнительный цикл, который нужно добавить (без функций):

   if [ $(date -u +'%d') -eq 28 ]; then

       for n in $(echo bullseye jammy xenial); do
         echo "OS name: $n"

       done

   fi

Пробовал добавить его после …."echo «it’s debian» fi done

или после всего, но цикл не срабатывал, как будто его нет.

Ответ на: комментарий от papin-aziat

Производительность скрипта меня (да и вряд ли кого вообще) не волнует, гораздо важнее производительность [труда] программиста, которую можно разделить на производительность во время написания и отладки/сопровождения программы. Чем нам тут могут помочь числа и другие типы?

Тип — это контракт. Если контракт нарушен, продолжать работу дальше не имеет смысла, нужно ругнуться в STDERR и готовиться к смерти. Важно, что и в случае динамической, и статической типизации контроль за соблюдением контракта переложен на машину, а программист от этой мороки избавлен. Т.е. единожды установив, что P — это true, а N равно 3, мы можем в дальнейшем свободно делать с ними любые булевы или арифметические операции. И нам не нужно всякий раз проверять, что строка «3» может быть воспринята как число, не нужно следить в каком контексте происходит вычисления, всегда 1 + 1 будет равняться 2 и никогда 11, и наоборот "1" + "1" = "11", опять же автоматом строки будут сортироваться лексикографически, а числа — математически/численно.

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

И главное, все эти типовые радости достаются абсолютно бесплатно. Я могу написать, для разбора аргументо командной строки, например:

(def cli-spec
        {:spec
         {:num {:desc "Number of parallel tasks."
                :alias :n
                :coerce :long
                :validate pos?}
         :parallel {:desc "Run in parallel?"
                    :alias :p
                    :coerce :boolean}}})

Здесь мы сказали (:coerce) раз, что --num это положительное целое число, а -p — должно стать булевым значением. И всё, теперь так и будет. Само:

user> (cli/parse-opts ["-n" "3" "-p"] cli-spec)
{:num 3, :parallel true}
user> (cli/parse-opts ["-n" "3"] cli-spec)
{:num 3}
user> (cli/parse-opts ["-n" "три"] cli-spec)
clojure.lang.ExceptionInfo: Coerce failure: cannot transform input "три" to long user *cider-repl /tmp:localhost:1668(clj)*:1:1
(cli/parse-opts ["-n" "0"] cli-spec)
clojure.lang.ExceptionInfo: Invalid value for option :num: 0 user *cider-repl /tmp:localhost:1668(clj)*:1:1

Я абсолютно могу быть уверен, что после cli/parse-opts у меня либо будут корректные значения, либо программа прервётся. Случай, когда я думаю, что значения такие и программа должна работать так, а на самом деле всё не так и она падает с воплями, этот случай исключён полностью. А чем я заплатил, чем пожертвовал? Да ничем существенным. Разве бабашку нужно с собой таскать, а она жирненькая. Но это отдельная история.

P.S. На сдачу получаю автоматическое построение справки для моих аргументов

user> (println (cli/format-opts cli-spec))
  -n, --num      Number of parallel tasks.
  -p, --parallel Run in parallel?
ugoday ★★★★★
()
Ответ на: комментарий от papin-aziat

Дык она и есть простая строка, всегда, гарантированно, но интерпретирует-то её принимающая программа, к ней и претензии стало быть.

Ну, нет. Создатели шелла приняли определённое решение *), определённый дизайн языка, и из него уже следует всё остальное. Поэтому претезнии к ним.


  • — Явно идея была в том, чтобы можно было просто скопировать команды из командной строки в скрипт, и код бы отработал без изменений. Это отличная идея для коротких скриптов. И ужасная — для длинных.
ugoday ★★★★★
()
Ответ на: комментарий от papin-aziat

ты бы написал на баше

Хорошо. Только нужно подождать когда в баше появятся типы, хотя бы для целых чисел и булевых значений. Иначе как я покажу пользу от типов на языке, в котором типов нету?

ugoday ★★★★★
()
Ответ на: комментарий от papin-aziat

Вот так правильно:

~$ echo $'one\ntwo\nthree' |sort
one
three
two

Вот так неправильно:

~$ echo $'1\n2\n10\n'| sort

1
10
2

Вот так снова правильно:

 ~$ echo $'1\n2\n10\n'| sort -n

1
2
10

Правильно-неправильно определяется способностью программиста помнить/предсказывать где каки значения в данных используются, и как в разных контекстах они могут быть проинтерпретированы. А надо, возложить это бремя на машину.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Дык есть же типизация, единственный тип — строка!

$ a=2; a+=4; echo $a
24

Это надо держать в голове и тогда не возникает вопроса, почему sort по умолчанию сортирует лексикографически.

papin-aziat ★★★★★
()
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

Дык есть же типизация, единственный тип — строка!

Подводит Господь Бог к Еву к Адаму и говорит: „Выбирай себе жену“.

Это надо держать в голове

А зачем? Лишнюю мороку вижу, а выгод от этого никаких не наблюдается. Был бы баш безальтернативным, пришлось бы жрать что дают, не на C же скрипты писать. Но скриптовых языков море разливное, так и чего ради?

ugoday ★★★★★
()
Ответ на: комментарий от papin-aziat

Это несомненный плюс. Но меня больше занимают скрипты, которые я пишу сам для себя. А уж тут я заведомо могу управлять окружением. Если исповедовать менее радикальный подход, то питон есть почти везде, а как язык он в тысячу раз языкастее.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Да я пытался паскалить и си тоже интересовался, но я слишком далёк от вещей, для которых эти языки пригодны. Не знаю откуда интерес, но почему-то хочется иногда что-то запрограммировать 😁

Короче, как ни крути, а я линуксоид и баш у меня всегда под рукой, вот так и было решено. Только раньше не было годных для изучения книг, а теперь у меня есть, вот и раскурил хоть как-то.

papin-aziat ★★★★★
()
Ответ на: комментарий от ugoday

Я уже говорил, что хотел scheme освоить, надо было для Lilypond, за одно, думал, он и как скриптовый для системы, наверное, сгодиться, но книжек бумажных совсем нет по нему. Есть одна, по которой в MIT учили раньше, но она для настоящих суровых программистов, мне такое не подходит.

Тем не менее, если вдруг войду во вкус, то может к схеме вернусь ещё, там прикольные концепции и язык красивый.

papin-aziat ★★★★★
()
Ответ на: комментарий от ugoday

есть серия интервью The A-Z of Programming Languages

по ознакомлении послабляет

зы

zsh приемлемей rc ?

ззы : в целом позновательно как неуместная сложность льстит «хлестаковым»(точнее скрипткиди не отрефлектящие свою скрипткидность)

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

пример не взлетевшего tcl среди публики очередной признак падения уровню таковой

qulinxao3 ★★
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Ответ на: комментарий от qulinxao3

zsh приемлемей rc ?

В диалоговом режиме — безусловно. Для скриптов оба не годятся (чем там zsh отличается от posix shell я не помню, да и не важно).

так то bash это потомок исполнения строк

Неудачная идея, просто. Из которой вытекают остальные проблемы.

ugoday ★★★★★
()
Последнее исправление: ugoday (всего исправлений: 1)
Ответ на: комментарий от ugoday

для скриптов(и ...) python (mojo?)

осталось модель(и) много(с троицы ибо между е пи начиная)исполнительского разнокоординированного осуществелния устоканить и

вот и 2030 как следствие 365 и 25

qulinxao3 ★★
()
Ответ на: комментарий от ugoday

rc из planIX

https://en.wikipedia.org/wiki/Rc_(Unix_shell)

сам факт что публике малополезен https://doc.cat-v.org/plan_9/4th_edition/papers/rc

на фоне фичастых фиолетовых крассивостей очень информативно на какой фазе индустрия

qulinxao3 ★★
()
Последнее исправление: qulinxao3 (всего исправлений: 2)