Упрощение последовательности условий bash

Ubuntu уже использует systemd. Чтобы изменить режим по умолчанию при загрузке, используйте

systemctl set-default multi-user.target

Чтобы вернуться к графическому режиму по умолчанию, используйте

systemctl set-default graphical.target
2
20.10.2021, 23:22
3 ответа

bash поддерживает расширенные регулярные выражения, и вы можете выполнять все проверки за одну, например:

[[ $file =~ (img|png|jpg|tif) ]] && echo do-something

чтобы проверить, содержит ли переменная файл любую из этих заданных строк (обратите внимание, что я использовал=~оператор для сопоставления регулярных выражений ).

0
21.10.2021, 01:23

В качестве альтернативы регулярному выражению менее элегантным методом было бы объединение условных выражений с использованием OR-, который в Bash представляет собой двойную вертикальную черту(||):

[[ "$fl" == *"img"* || "$fl" == *"png"* || "$fl" == *"jpg"* || "$fl" == *"tif"* ]] && mv "$flimg" "$out"

Двойной канал также будет работать в оболочке Bourne или Korn -, используя только одинарные фигурные скобки([])и изменяя ==на=(только для Bourne ), например

[ "$fl" = *"img"* || "$fl" = *"png"* || "$fl" = *"jpg"* || "$fl" = *"tif"* ] && mv "$flimg" "$out"
0
21.10.2021, 01:45

Используя стандартный синтаксис POSIX sh, который также действителен в bash, вы можете использовать оператор caseздесь:

case $fl in
    *img*|*jpg*|*png*|*tif*)
        mv -- "$flimg" "$out"
esac

или, как «один -вкладыш»,

case $fl in (*img*|*jpg*|*png*|*tif*) mv -- "$flimg" "$out"; esac

Если вы включите опцию оболочки extglobс помощью shopt -s extglob, вы также можете использовать

[[ $fl == *@(img|jpg|png|tif)* ]] && mv -- "$flimg" "$out"

Если вы хотите проверить только суффикс имени файла после последней точки в имени файла в$fl:

case ${fl##*.} in (img|jpg|png|tif) mv -- "$flimg" "$out"; esac

или после shopt -s extglob,

[[ ${fl##*.} == @(img|jpg|png|tif) ]] && mv -- "$flimg" "$out"

Стандартное расширение ${variable##pattern}удаляет самую длинную строку префикса из $variable, соответствующую pattern. Использование *.в качестве шаблона означает удаление всего до последней точки в значении включительно.

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

0
21.10.2021, 06:03

Теги

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