Принимайте только 4 символа, десятичные числа как пользовательский ввод для чтения - PullRequest
1 голос
/ 06 марта 2019

Я пишу небольшой скрипт, чтобы легко фиксировать веса, которые берутся из пользовательского ввода с помощью read -p.

Я хочу, чтобы все зафиксированные веса имели длину 4 символа, десятичные числа в формате XX.X .Например, 30,2 кг.

#!/bin/bash

# take input from prompt (-p) and store it in $varweight
read -p 'Enter weight in kg: ' varweight

Как сделать так, чтобы пользователи могли вводить только десятичные числа в этом формате?

Спасибо за помощь.

1 Ответ

3 голосов
/ 06 марта 2019

Одним из способов будет использование регулярного выражения и утверждение длины для удаления ложных срабатываний (опционально).Конечно, для нижеследующего потребуется оболочка bash, поскольку ~ не соответствует POSIX

str="30.4"
re='^[[:digit:]]{2}\.[[:digit:]]$'

if [[ $str =~ $re ]]; then
    echo 'true'
fi

В оболочке, совместимой с POSIX, хотя вы можете использовать оператор case

case $str in  
   [0-9][0-9].[0-9]) echo good ;; 
   *) echo bad;; 
esac

Гораздо лучшим POSIX-совместимым инструментом будет использование expr для сопоставления регулярных выражений.

if expr "$str" : '[[:digit:]]\{2\}\.[[:digit:]]$' > /dev/null; then
    echo "true"
fi
...