2015-08-26 6 views
1

У меня есть некоторые параметры, которые пользователь может передать команде, но мне нужно получить число, следующее за определенной строкой.Получить номер после сопоставления строки bash

Вот некоторые примеры параметров я проходящие в сценарий Баша

xxx.sh cpus="12" memory="1500mb" 
xxx.sh -cpus 12 -memory 1500mb 
xxx.sh cpus=12 memory=1500mb 

Я хотел бы найти первое вхождение процессоров и возвращать число 12.

Номер может быть в любом месте от 1 до 1000.

+3

Похоже, вы пытаетесь реализовать свою собственную версию 'getopts' - я предлагаю вам взглянуть на то, что уже имеющийся до этого. –

ответ

0

Вы можете использовать это регулярное выражение в скрипте:

[[ $* =~ cpus[^[:digit:]]*([[:digit:]]+) ]] && echo "${BASH_REMATCH[1]}" 

RegEx Demo

Это напечатает 12 для всех аргументов командной строки, указанных в вашем вопросе.

Это будет соответствовать cpus с последующим 0 или более не цифрами, а затем он соответствует и захватил 1 или более цифр в захваченной группе № 1, т.е. "${BASH_REMATCH[1]}"

+1

спасибо. Это именно то, что я искал. – Fixitben

0

Я использую этот небольшой фрагмент код для длинных опций в Баше. Функция pv (переменная печати) Я использую только для отладки.

#!/bin/bash 

function pv() { 
    echo "$1: ${!1}" 
} 

while [ $# -gt 0 ]; do 
    case $1 in 
    -m|--memory) mem=$2; shift ;; 
    -c|--cpus) cpus=$2; shift ;; 
    *) ;; 
    esac 
    shift 
done 

pv cpus 
pv mem 

Вы также можете использовать этот бит, если вы заинтересованы только в коротких вариантах:

#!/bin/bash 

while getopts tx: opt; do 
    case "$opt" in 
     t) TEST="-test" ;; 
     x) FOO="$OPTARG" ;; 
     *) ;; 
    esac 
done 

echo "TEST = $TEST" 
echo "FOO = $FOO" 
Смежные вопросы