#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/.