На самом деле здесь можно использовать стандартные расширения параметров (вам просто не хватило подстановочного знака):
$ args=a:b:c:
$ x=b
$ echo "${args%$x:*}"
a:
$ if [ "$args" != "${args#*$x:}" ]; then echo 'b: is present'; fi
b: is present
(или в равной степени"${args%$x:*}"
)
Недостатком является то, что вам нужно поставить двоеточие после b
, поэтому a:b
или простое b
не будет соответствовать, а также будет соответствовать a:bb:c
. ([[ $var = *$x:* ]]
, а также очевидное совпадение шаблона с case
имеют тот же недостаток.)
Совпадение со всеми b
, b:c
, a:b
, a:b:c
, не совпадающее с a:bb:c
, было бы немного сложнее. Все, о чем я могу думать, это что-то вроде этого:
args=a:b:c
x=b
IFS=: # affects globally
set -f # affects globally...
for x in $args; do
if [ "$x" = "b" ]; then
echo "b is present"
fi
done
Если вы не хотите выписывать все случаи:
args=a:b:c
x=b
found=0
case "$args" in
$x) found=1;;
$x:*) found=1;;
*:$x) found=1;;
*:$x:*) found=1;;
esac
if [ "$found" = 1 ]; then...; fi
Намного проще с регулярными выражениями (в Bash):
args=b:c
x=b
if [[ $args =~ (^|:)$x(:|$) ]]; then
echo "b found"
fi
Подсеть с 192.168.2.0
по 192.168.2.7
— 192.168.2.0/29
, т. е. маска сети — 255.255.255.248
, а не 255.255.255.255
. В192.168.2.0/29
192.168.2.0
указан сетевой адрес, т. е. недопустимый адрес хоста.
Вы должны выяснить, маршрутизирует ли ваш интернет-провайдер 192.168.2.0/29
на IP-адрес вне этого диапазона (, например.192.168.1.25
)или находится ли исходящий IP-адрес в этой сети. Если подсеть маршрутизируется, вам не нужен какой-либо IP-адрес на этом интерфейсе.