BASH Проверьте, существует ли внутри переменной - PullRequest
1 голос
/ 02 ноября 2011

Я работаю над сценарием, который будет использоваться для сопоставления сетевых дисков. Однако мы хотим попытаться сопоставить диск, только если у компьютера есть определенный IP-адрес. Ниже приведен фрагмент кода, который мы пытаемся заставить работать.

#!/bin/sh

IP="dig $HOSTNAME +short"

if [ $IP == *10.130.10.* ]; then
    mount drive commands here
fi

if [ $IP == *10.130.11.* ]; then
    mount drive commands here
fi

Я не могу заставить чек на IP работать. Есть ли лучший способ проверить, содержит ли переменная строку, в данном случае часть IP-адреса?

Информация, указанная в этой публикации, не была полезной, поскольку она не работала.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

У вас есть вопрос "bash" по этому вопросу, но шебанг говорит / bin / sh.Что вы на самом деле хотите использовать?

Собственно, обо всем по порядку.Способ установки IP не работает, так как он никогда не запускает команду dig;для этого вам нужны либо обратные кавычки, либо $( ):

IP="$(dig $HOSTNAME +short)"

Теперь для теста;Есть несколько способов сделать это.Это должно работать во всех оболочках:

case "$IP" in
    *10.130.10.*)
        mount drive commands here
        ;;
    *10.130.11.*)
        mount drive commands here
        ;;
esac

Обратите внимание, что если команды монтирования одинаковы для двух подсетей, вы можете использовать *10.130.10.*|*10.130.11.*) в качестве шаблона для сопоставления.

Если выНа самом деле вы используете bash, вы можете использовать его условное выражение [[ ]], чтобы сделать сопоставление, более похожее на то, как у вас это было:

if [[ "$IP" == *10.130.10.* ]]; then
    mount drive commands here
elif [[ "$IP" == *10.130.11.* ]]; then
    mount drive commands here
fi

Как и выше, если команды монтирования одинаковы, вы можете сделатьодин условный с if [[ "$IP" == *10.130.10.* || "$IP" == *10.130.10.* ]]; then.Кроме того, двойные кавычки вокруг $IP на самом деле не нужны в этом конкретном случае, но я всегда делаю привычку заключать в двойные кавычки переменные, если нет причины не делать этого.

1 голос
/ 02 ноября 2011
[[ "${IP/10.130.10./}" = "$IP" ]] || mount
...