2015-08-26 53 views
1

我有一些參數,用戶可以傳遞給命令,但我需要獲取特定字符串後面的數字。匹配字符串bash後獲取數字

這裏是我傳遞給bash腳本參數的一些例子

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

我想尋找的CPU的第一次出現,並返回數字12

的數量可能是從1到1000

+3

看起來像你想實現自己的getopts'的'版本 - 我建議你看看什麼在這樣做之前已經可用。 –

回答

0

任何地方你可以在腳本中使用這個表達式:

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

RegEx Demo

這將打印12您的問題中顯示的所有命令行參數。

這將匹配cpus後跟0或更多個非數字,然後它匹配和捕獲在捕獲組#1即"${BASH_REMATCH[1]}"

+1

非常感謝。這正是我所期待的。 – Fixitben

0

1個或多個數字我使用這個小片段爲在bash長選項。 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"