Арифметические выражения в bash switch - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу, чтобы этот скрипт загружал строковый аргумент, проверял его длину, и если его длина равна 1, то присваиваю 1 переменной, в противном случае присваиваем ей арифметическое выражение. У меня проблемы с синтаксисом bash, и я не могу заставить его работать. Любая помощь будет оценена. Это моя попытка:

#!/bin/bash

stringArg=$1
let myVariable=1
case "${#stringArg}" in
 1) myVariable=1 ;;
 *) myVariable="${#stringArg}*2-2" ;;
esac

echo $myVariable

Запуск с ./test.sh 123 выходами 3*2-2, но я хочу, чтобы он напечатал 4.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы просто присваиваете выражение переменной, а не фактическому значению после оценки.

Вы можете оценивать выражения различными способами: $(()) или bc и т. Д.

#!/bin/bash

stringArg=$1
let myVariable=1
case "${#stringArg}" in
 1) myVariable=1 ;;
 *) myVariable="${#stringArg}*2-2" ;;
esac

echo $(( $myVariable ))
...