выберите целое число, большее 0 и меньшее 4, используя bash

#bash

Вопрос:

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

 #! /bin/bash
validateRange () {
if (( "$PICK" > "0" )) amp;amp; (( "$PICK" <= "$LIMIT" )) then 
    echo "valid number"
fi
}
(( LIMIT=4 ))
(( PICK=2 ))
validateRange "$PICK" "$LIMIT"
 

shellcheck дал этому все понять

 $ shellcheck myscript
No issues detected!

$
 

Однако тот же код не запускается в моем .bash_functions script .

 .bash_functions: line 201: syntax error near unexpected token `then'
.bash_functions: line 201: `  if (( "$PICK" > "0" )) amp;amp; (( "$PICK" <= "$LIMIT" )) then '
 

Я не уверен, что не так с моим кодом. Есть ли другой способ добиться этого в bash ?

Комментарии:

1. Вставьте свой сценарий в shellcheck.net для подтверждения/рекомендации.

2. Никаких проблем не обнаружено!

3. help [[ , help '((' и help test

4.Внутри (( )) или $(( )) находятся операторы > , < != , == и так далее, см. раздел «Арифметика» руководства.

5. Если вы держите then его в одной строке с if , то после второго должна быть точка с запятой ( ; ) )) .

Ответ №1:

Правильная версия этого сценария может быть:

 #!/bin/bash

validateRange () {
  if (( "$1" > 0 )) amp;amp; (( "$1" <= "$2" ))
  then
    echo "valid number"
  fi
}

declare -i LIMIT
LIMIT=4
declare -i PICK
PICK=2
validateRange "$PICK" "$LIMIT"
 

Комментарии:

1. размещение «тогда» имело решающее значение

Ответ №2:

Попробуй [ "$PICK" -gt 0 ] . Есть и немало других проблем. Я предлагаю вам сесть и прочитать учебник по Башу, проблемы очень простые и очевидные.

шеллчек-это просто линтер. Это не сработает, если ваш синтаксис уже очень неправильный. Вы можете использовать его вместе с https://github.com/bash-lsp/bash-language-server/.