Этот вопрос уже имеет ответ здесь:
Я хочу записать сценарий оболочки Unix, который сделает различную логику, если будет строка в другой строке. Например, если я нахожусь в определенной папке, отклоняюсь. Кто-то мог сказать мне, как выполнить это? Если возможный я хотел бы заставить это не окружить конкретный (т.е. не колотить только), но если нет никакого другого пути, я могу суметь обойтись этим.
#!/usr/bin/env sh
if [ "$PWD" contains "String1" ]
then
echo "String1 present"
elif [ "$PWD" contains "String2" ]
then
echo "String2 present"
else
echo "Else"
fi
Чистая оболочка POSIX:
#!/bin/sh
CURRENT_DIR=`pwd`
case "$CURRENT_DIR" in
*String1*) echo "String1 present" ;;
*String2*) echo "String2 present" ;;
*) echo "else" ;;
esac
Расширенные оболочки, такие как ksh или bash, имеют необычные механизмы сопоставления, но старый вариант
удивительно мощный.
К сожалению, я не знаю, как это сделать в sh. Однако, используя bash (начиная с версии 3.0.0, которая, вероятно, у вас есть), вы можете использовать оператор = ~ следующим образом:
#!/bin/bash
CURRENT_DIR=`pwd`
if [[ "$CURRENT_DIR" =~ "String1" ]]
then
echo "String1 present"
elif [[ "$CURRENT_DIR" =~ "String2" ]]
then
echo "String2 present"
else
echo "Else"
fi
В качестве дополнительного бонуса (и / или предупреждения, если в ваших строках есть какие-то забавные символы в них), = ~ принимает регулярные выражения в качестве правильного операнда, если вы опускаете кавычки.
case $(pwd) in
*path) echo "ends with path";;
path*) echo "starts with path";;
*path*) echo "contains path";;
*) echo "this is the default";;
esac
Есть регулярные выражения bash . Или есть «expr»:
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
См. manpage для программы 'test'. Если вы просто проверяете существование каталога, вы обычно делаете что-то вроде этого:
if test -d "String1"; then
echo "String1 present"
end
Если вы действительно пытаетесь найти строку, вы можете использовать правила расширения bash и подстановочные знаки:
if test -d "String*"; then
echo "A directory starting with 'String' is present"
end
Если вам нужно сделать что-то более сложное, вам нужно использовать другую программу, например expr.