我有一些參數,用戶可以傳遞給命令,但我需要獲取特定字符串後面的數字。匹配字符串bash後獲取數字
這裏是我傳遞給bash腳本參數的一些例子
xxx.sh cpus="12" memory="1500mb"
xxx.sh -cpus 12 -memory 1500mb
xxx.sh cpus=12 memory=1500mb
我想尋找的CPU的第一次出現,並返回數字12
的數量可能是從1到1000
我有一些參數,用戶可以傳遞給命令,但我需要獲取特定字符串後面的數字。匹配字符串bash後獲取數字
這裏是我傳遞給bash腳本參數的一些例子
xxx.sh cpus="12" memory="1500mb"
xxx.sh -cpus 12 -memory 1500mb
xxx.sh cpus=12 memory=1500mb
我想尋找的CPU的第一次出現,並返回數字12
的數量可能是從1到1000
任何地方你可以在腳本中使用這個表達式:
[[ $* =~ cpus[^[:digit:]]*([[:digit:]]+) ]] && echo "${BASH_REMATCH[1]}"
這將打印12
您的問題中顯示的所有命令行參數。
這將匹配cpus
後跟0或更多個非數字,然後它匹配和捕獲在捕獲組#1即"${BASH_REMATCH[1]}"
非常感謝。這正是我所期待的。 – Fixitben
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"
看起來像你想實現自己的getopts'的'版本 - 我建議你看看什麼在這樣做之前已經可用。 –