Я хочу проверить условие, как показано ниже. Строка не должна начинаться с #
символ:
if[ ! ["$Line" == "#*"] ]; then
Но это не работает.
Предположим, что у вас есть строка в переменной 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
Связанные: