оболочка: создайте команду Shortcut (псевдоним или функция) для работы с IP-адресом как аргументы

Я просто устанавливаю drupal на моем веб-сервере, только для Вас ;) Вот отрывок конфигурации в качестве примера с vhost:

$HTTP["host"] =~ "drupal\.mysite\.com$" {
        server.document-root = "/var/www/drupal/"
        url.rewrite-final = (
                "^/system/test/(.*)$" => "/index.php?q=system/test/$1",
                "^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
                "^/([^.?]*)$" => "/index.php?q=$1",
                "^/rss.xml" => "/index.php?q=rss.xml"
        )
}

Это работает (я могу включить Чистые URL в drupal, и это, кажется, работает), я не знаю, как Ваша конфигурация смотрит на самом деле, но возможно первая попытка адаптировать мою. Необходимо поместить это в конце lighttpd.conf, материал LUA должен также работать, весь вывод дорог в Рим ;) Но я думаю, что лучше сохранить это простым а не включить так много модули. Я уверен, что Вам будет нужен переписать модуль больше, чем магнит в будущем.

-1
задан 2 January 2013 в 16:39
2 ответа

то, что вы называете ярлыком , похоже, своего рода псевдоним или более сложные функции .

для ответа на ваш вопрос вы можете:

alias checkCommand="grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'"
echo 23.4.5.1  | checkCommand
23.4.5.1

или

function checkIsIp() {
    grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
}
echo 23.4.5.1  | checkIsIp

Существует функция bash, которая проверяет IP (v4), и более того, она вычисляет 32-битное целое число, если аргумент является действительным IP, и возвращает RC> 0 , если еще:

function check_Is_Ip() {
    local IFS=.
    set -- $1
    [ $# -eq 4 ] || return 2
    local var
    for var in $* ;do
        [ $var -lt 0 ] || [ $var -gt 255 ] && return 3
      done
    echo $(( ($1<<24) + ($2<<16) + ($3<<8) + $4))
}

чем сейчас:

if check_Is_Ip 1.0.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
It is.

if check_Is_Ip 1.255.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
It is.

if check_Is_Ip 1.256.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
There is not.

и может использоваться для расчета IP:

Есть функция возврата:

int2ip() {
    echo $(($1>>24)).$(($1>>16&255)).$(($1>>8&255)).$(($1&255))
}

check_Is_Ip 255.255.255.0
4294967040
check_Is_Ip 192.168.1.31
3232235807

int2ip $((4294967040 & 3232235807))
192.168.1.0

Итак, в качестве хорошей практики вы можете:

function die() {
    echo "Error: $@" >&2
    exit 1
}

netIp="192.168.1.31"
netMask="255.255.255.0"

intIp=$(check_Is_Ip $netIp) || die "Submited IP: '$netIP' is not an IPv4 address."
intMask=$(check_Is_Ip $netMask) || die "Submited Mask: '$netMask' not IPv4."
netBase=$(int2ip $(( intIp & intMask )) )
netBcst=$(int2ip $(( intIp | intMask ^ ( (1<<32) - 1 ) )) )
printf "%-20s: %s\n" \
    Address $netIp Netmask $netMask Network $netBase Broadcast $netBcst

Address             : 192.168.1.31
Netmask             : 255.255.255.0
Network             : 192.168.1.0
Broadcast           : 192.168.1.255

Где выполняется проверка, проверка и преобразование входных данных, это только один операция:

intMask=$(check_Is_Ip $netMask) || die "Submited Mask: '$netMask' not IPv4."

Если $ netMask не соответствует IPv4, команда check_Is_Ip завершится ошибкой, тогда die будет выполнено. В противном случае результат преобразования будет сохранен в переменной intMask .

if check_Is_Ip 1.0.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
It is.

if check_Is_Ip 1.255.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
It is.

if check_Is_Ip 1.256.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
There is not.

и может использоваться для вычисления IP:

Существует обратная функция:

int2ip() {
    echo $(($1>>24)).$(($1>>16&255)).$(($1>>8&255)).$(($1&255))
}

check_Is_Ip 255.255.255.0
4294967040
check_Is_Ip 192.168.1.31
3232235807

int2ip $((4294967040 & 3232235807))
192.168.1.0

Итак, в качестве хорошей практики вы можете:

function die() {
    echo "Error: $@" >&2
    exit 1
}

netIp="192.168.1.31"
netMask="255.255.255.0"

intIp=$(check_Is_Ip $netIp) || die "Submited IP: '$netIP' is not an IPv4 address."
intMask=$(check_Is_Ip $netMask) || die "Submited Mask: '$netMask' not IPv4."
netBase=$(int2ip $(( intIp & intMask )) )
netBcst=$(int2ip $(( intIp | intMask ^ ( (1<<32) - 1 ) )) )
printf "%-20s: %s\n" \
    Address $netIp Netmask $netMask Network $netBase Broadcast $netBcst

Address             : 192.168.1.31
Netmask             : 255.255.255.0
Network             : 192.168.1.0
Broadcast           : 192.168.1.255

Там, где проверка, проверка и преобразование входных данных выполняется, это только одна операция:

intMask=$(check_Is_Ip $netMask) || die "Submited Mask: '$netMask' not IPv4."

Если $ netMask не соответствует IPv4, команда check_Is_Ip завершится ошибкой, тогда die будет выполнено. В противном случае результат преобразования будет сохранен в переменной intMask .

if check_Is_Ip 1.0.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
It is.

if check_Is_Ip 1.255.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
It is.

if check_Is_Ip 1.256.0.1 >/dev/null; then echo It is. ;else echo There is not. ;fi
There is not.

и может использоваться для вычисления IP:

Существует обратная функция:

int2ip() {
    echo $(($1>>24)).$(($1>>16&255)).$(($1>>8&255)).$(($1&255))
}

check_Is_Ip 255.255.255.0
4294967040
check_Is_Ip 192.168.1.31
3232235807

int2ip $((4294967040 & 3232235807))
192.168.1.0

Итак, в качестве хорошей практики вы можете:

function die() {
    echo "Error: $@" >&2
    exit 1
}

netIp="192.168.1.31"
netMask="255.255.255.0"

intIp=$(check_Is_Ip $netIp) || die "Submited IP: '$netIP' is not an IPv4 address."
intMask=$(check_Is_Ip $netMask) || die "Submited Mask: '$netMask' not IPv4."
netBase=$(int2ip $(( intIp & intMask )) )
netBcst=$(int2ip $(( intIp | intMask ^ ( (1<<32) - 1 ) )) )
printf "%-20s: %s\n" \
    Address $netIp Netmask $netMask Network $netBase Broadcast $netBcst

Address             : 192.168.1.31
Netmask             : 255.255.255.0
Network             : 192.168.1.0
Broadcast           : 192.168.1.255

Там, где проверка, проверка и преобразование входных данных выполняется, это только одна операция:

intMask=$(check_Is_Ip $netMask) || die "Submited Mask: '$netMask' not IPv4."

Если $ netMask не соответствует IPv4, команда check_Is_Ip завершится ошибкой, тогда die будет выполнено. В противном случае результат преобразования будет сохранен в переменной intMask .

1
ответ дан 5 December 2019 в 20:03

Если вы хотите создать ярлык для другой команды, вы можете использовать встроенную команду оболочки псевдоним . Для получения дополнительной информации см. man bash .

В качестве примера вы можете использовать:

$ alias your_command_name='your complicated and long command'
0
ответ дан 5 December 2019 в 20:03

Теги

Похожие вопросы