2016-01-28 5 views
0

У меня есть этот скрипт Bash, который имеет базовый оператор if...else, но скрипт, похоже, не правильно распознает значения и просто продолжает сценарий, когда он должен остановиться и показать ошибку.Использование плавающих точек в сценарии Bash

Я считаю, что это потому, что я использую число с плавающей точкой, и bash не может сказать. Вот сценарий:

Примечание: функция error это просто функция клиента

while getopts ":mh" opt; do 
    case $opt in 
     m) 
      version="${OPTARG}" 
      ;; 
     \?) 
      error "-$OPTARG is not a valid option. Use '-h' for more options" 'warn' 
      ;; 
     *|h) 
      usage 
      ;; 
    esac 
done 
echo ${version} # here for debugging - this is either blank, or '0' 
shift $((OPTIND-1)) 

[[ -z ${version} ]] && version=5.7 

[[ "${version}" -lt "5.5" || "${version}" -gt "5.7" ]] && 
    error "Valid MySQL versions: 5.5 - 5.6 - 5.7" 'error' 
echo ${version} # this then becomes '5.7' further down the script 

Так, очевидно, я хочу, чтобы сценарий выхода, если значение -m меньше 5,5 или больше 5,7 , Снова я думаю, что это связано с тем, что значение является плавающим.

Любая помощь приветствуется.

+0

Обратите внимание, что номера версий редко являются десятичными числами. 1.2 <1.10 и т. Д. – Biffen

ответ

0

Вы можете использовать расширение bash, чтобы использовать версию по умолчанию и регулярное выражение для их проверки. Лучше проверить с помощью regex вместо -le и -ge, потому что вы можете указать список допустимых параметров.

version=${version:-5.7} 
[[ "$version" =~ ^(5\.5|5\.6|5\.7)$ ]] || error "Valid MySQL versions: 5.5 - 5.6 - 5.7" 
+1

Или '^ 5 \. [567] $'. (По крайней мере, избегайте '.'.) – Biffen

+0

@Biffen отлично, забыл избежать точек, спасибо. –