Можно использовать любое из следующих к командам выполнения когда $1
пусто:
[[ ! $1 ]] && { COMMANDS; }
[[ $1 ]] || { COMMANDS; }
[[ -z $1 ]] && { COMMANDS; }
[[ -n $1 ]] || { COMMANDS; }
Кроме того, Вы не должны заключать расширение в кавычки в этом конкретном примере, поскольку никакое разделение слова не выполняется.
Если Вы желаете проверить, существуют ли аргументы, тем не менее, Вы были бы лучше для использования (( $# ))
.
Если я понял Ваши намерения, вот то, как Ваш код мог быть написан с getopts
:
#!/bin/bash
(( $# )) || printf '%s\n' 'No arguments'
while getopts ':n:h' opt; do
case "$opt" in
n)
[[ $OPTARG ]] && printf '%s\n' "Commands were run, option $OPTARG, so let's do what that says."
[[ ! $OPTARG ]] && printf '%s\n' "Commands were run, there was no option, so let's run some stuff."
;;
h) printf '%s\n' 'Help printed' ;;
*) printf '%s\n' "I don't know what that argument is!" ;;
esac
done
Похоже, что Вы пытаетесь сделать что-то значительно более сложное, чем я думаю, что Вы хотите.
Что Вы просите:
Заблокируйте определенную строку в полезной нагрузке (уровень 7) пакета. Это будет препятствовать тому, чтобы кто-то послал электронное письмо или IM упоминание строки "linuxcore", или от добавления комментариев на форумах об этом.
Что я думаю, что Вы хотите:
Пакеты перенаправления, предназначенные для любого IP-адреса, разрешенного именем domain.com и предназначенный для порта 8888 для портирования 7777.
Я приму то, что я думаю, что Вы хотите, так как первый не имеет особого смысла. Я также предполагаю, что Вы не интересуетесь соответствием "foo.domain.com". Помните, что это - IP таблицы, не таблицы DNS.
В этом случае строки 1, 2 и 4 являются ненужными. И Вы не хотите сопоставление строк. iptables
достаточно умно, чтобы превратить имена в соответствующие IP-адреса и мультиплексировать правила по мере необходимости. Кроме того, так как Вы используете PREROUTING
, знайте, что это будет только соответствовать входу в Вашу систему, не пакеты, оставляя Вашу систему (если Вы захотите соответствовать пакетам, оставляя Вас, должен использовать OUTPUT
, или альтернативно имейте одного из каждого).
То правило было бы похоже на это:
iptables -t nat -A PREROUTING -d domain.com -p tcp --dport 8888 -j REDIRECT --to-ports 7777