Как проверить, не запускается ли условие в операторе if?

Я хочу проверить условие, как показано ниже. Строка не должна начинаться с # символ:

if[ ! ["$Line" == "#*"] ]; then

Но это не работает.

0
31.08.2018, 05:28
1 ответ

Предположим, что у вас есть строка в переменной lineи вы хотите вывести строку yes, если она не начинается с символа #. В приведенных ниже примерах я также выведу no, если условие не выполняется.

case $line in
    "#"*) echo no
esac

Оператор caseпринимает переменную, а затем любое количество (подстановочных шаблонов )и выполняет код для шаблона, который соответствует значению переменной. В этом случае мы пытаемся сопоставить шаблон"#"*(#, который должен быть заключен в кавычки, чтобы не восприниматься как введение комментария ), и если он соответствует, выполняется оператор echo.

Если шаблонов больше, то код для всех шаблонов, кроме последнего, должен заканчиваться ;;, как в

case $line in
    "#"*) echo no ;;
    *)    echo yes
esac

...и код шаблона может быть пустым:

case $line in
    "#"*) ;;
    *)    echo yes
esac

Оболочка bashтакже выполняет сопоставление шаблонов с шаблонами в [[... ]]с помощью оператора ==:

if [[ $line != "#"* ]]; then
    echo yes
else
    echo no
fi

В bashвы также можете использовать сопоставление регулярных выражений с оператором =~внутри[[... ]]:

if ! [[ $line =~ ^# ]]; then
    echo yes
else
    echo no
fi

или

if [[ $line =~ ^[^#] ]]; then
    echo yes
else
    echo no
fi

Если вы стираете файл построчно, то оболочка не подходит для этой работы. Вместо этого вы можете использовать что-то вродеawk:

awk '/^[^#]/ { print yes }' <inputfile

Связанные:

0
28.01.2020, 02:34

Теги

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