LINUX.ORG.RU

Помогите разобрать посимвольно строку bash скрипта

 


0

1

Всем привет. Вот только начал осваивать BASH. Пока разбираю уже готовые скрипты. Не могу никак понять посимвольно - что как работает здесь

[[ ! -d "$target/$year/$monthn - $month" ]] && mkdir -p "$target/$year/$monthn - $month"; 

Вот что понял - это скрипт создания директории и всего пути к этой директории при выполнении условий, которые заданы

[[ ! -d "$target/$year/$monthn - $month" ]] 

но что вот это и как работает [[ ! -d ]] не могу понять. Помогите!



Последнее исправление: xaizek (всего исправлений: 1)

[[ ! -d ]]

ну -d это очевидно проверка на существование такой директории. ! – это отрицание условия. [[ ]] содержит условное выражение. В man bash же написано.

Подозреваю, что ты не знаком с поиском по манам. Так вот, делаешь команду

man bash, чтобы искать строку нажимаешь «/». Так как [ – это управляющий символ, то чтобы искать его в мане, надо его заэкранировать обратной косой чертой. То есть чтобы в man bash найти строку [[, надо в строке поиска набрать [[

anonymous
()

В 3-м сообщении уже разжевали, а вообще тут проверку можно пропустить и свести строку к «mkdir -p каталог».

YAR ★★★★★
()

не могу понять. Помогите!

Хотя бы пролистай «Командная строка Linux. Полное руководство» Уильяма Шоттса, и не надо ничего думать или просить помощи.

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

и не надо..просить помощи.

Не, ну ты уж не перегибай так сходу. Пусть просит. Ссылки ему дали, про man рассказали. Пусть приходит через пару дней, вопросы наверняка будут.

Oberstserj ★★
()

то что в квадратных скобках, всегда удобно смотреть в man test, там и восклицательный знак описан

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

то что в квадратных скобках, всегда удобно смотреть в man test, там и восклицательный знак описан

А также неплохо почитать man mkdir и понять, что при вызове с -p квадратные скобки с содержимым нафиг не нужны.

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

Я тут разобрался, что в этом конкретно случае -d (а также -e и т.д.) - это команды. А ! - это проверка.

Просто я ошибочно думал, что ! - это команда, а -d … -e… - это параметры и искал неправильно.

allset
() автор топика
Ответ на: комментарий от Oberstserj

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

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

Ну вот я ее и читаю - ну очень сложно! А есть ли какой сайт с виртуальной Linux/BASH - чтобы вот там в командной строке можно было вводить man test ?

allset
() автор топика
Ответ на: комментарий от gremlin_the_red

Этим я пользуюсь - но то ли там не полностью все опции указаны ,то ли не разобрался опять же. А вот типа такого
https://bellard.org/jslinux/vm.html?url=alpine-x86.cfg&mem=192 есть ? только тут если в командную строку написать man test - оно возвращает ошибку.

allset
() автор топика
Ответ на: комментарий от IvanR

man test

Не путай [ и [[, у них немного разное поведение. В данном случае разницы нет, но вообще можно нарваться на сложно диагностируемые грабли, если подставлять параметры для test в [[.

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

чтобы вот там в командной строке можно было вводить man test ?

В гугл, первые ссылки будут на маны. И поставь уже линукс.

А есть ли какой сайт с виртуальной Linux/BASH

Конечно, в гугл.

Ну вот я ее и читаю - ну очень сложно!

Да ладно, я по местным меркам гуманитарий, и то понимаю. Конечно, книжку можно немного покритиковать, но если поразмыслить, то как она могла бы выглядеть иначе? Автору приходится долго вводить человека в популярные утилиты, ибо из них собственно и состоит это самое программирование в командной оболочке, хотя по мне было бы лучше целиком посвятить книгу выкрутасам баша.

От себя, как от вечного начинающего в программировании скажу.

Главное, разберись как баш «видит» строку и как интерпретирует кавычки, без этого будешь постоянно всё путать.

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

Для более практических и интересных занятий рекомендую «Сценарии командной оболчки» Дейва Тейлора и Брендона Перри. Там прикольно, код и комментарии, как он работает. Есть похожая «Bash Cookbook», но у меня она чёта на английском, может есть перевод, хз.

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

ммм, какой хороший язык - bash!

anonymous
()
18 сентября 2022 г.
Ответ на: комментарий от SpaceRanger

За что тебя благодарить? На вопрос по программированию на С, ты дал книгу по использованию компилятора gcc. Темы близкие, но не то

futurama ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.