NBash
65 строк · 1.6 Кб
1#!/bin/bash
2
3DD="."
4TD=","
5
6nicenumber()
7{
8integer=$(echo $1 | cut -d$DD -f1) # целая часть
9decimal=$(echo $1 | cut -d$DD -f2) # дробная часть
10
11# проверка на наличие дробной части
12if [ "$decimal" != "$1" ]; then
13result="$DD$decimal"
14fi
15
16thousands=$integer
17
18# формирование целой части с разделителями
19while [ $thousands -gt 999 ]; do
20remainder=$(($thousands % 1000))
21
22# добавление значащих нулей до полного разряда
23while [ ${#remainder} -lt 3 ]; do
24remainder="0$remainder"
25echo "remainder=$remainder"
26done
27
28result="$TD${remainder}${result}"
29echo "result=$result"
30
31thousands=$(($thousands / 1000))
32echo "thousands=$thousands"
33done
34
35nicenum="${thousands}${result}" # итоговое представление числа
36
37# вывод на печать при наличии второго параметра
38if [ ! -z $2 ]; then
39echo $nicenum
40fi
41}
42
43# Основной сценарий
44
45# Обработка флагов
46while getopts "d:t:" opt; do
47case $opt in
48d) DD="$OPTARG";;
49t) TD="$OPTARG";;
50esac
51done
52shift $(($OPTIND - 1)) # смещение индекса параметров на кол-во флагов
53
54# Проверка ввода
55if [ $# -eq 0 ]; then
56echo "Usage: $(basename $0) [-d c] [-t c] number"
57echo "-d - specifies the decimal point delimiter"
58echo "-t - specifies the thousands delimiter"
59exit 0
60fi
61
62# вызов функции обработки числа и вывод его на экран
63nicenumber $1 1
64
65exit 0