KSH Проверка наличия номера в списке
У меня есть список чисел, около 200, и в начале моего ksh я хочу проверить, является ли параметр 1 одним из этих чисел.
Я решил это с большим if, но я думаю, что должно существовать более элегантное решение.
В примере как то так, но в кш
if $1 in (50, 28, 500, 700, 1, 47) then
do what I want
else
exit
end if
Есть идеи начать работать?
Благодарю.
Луис
2 ответа
Оператор case работает для коротких списков, если список изменяется или является длинным, что может привести к неприятным последствиям в спешке. Другая идея заключается в использовании ассоциативного массива. Я настроил список из 100 случайных чисел в файле rand.txt
и запустил этот скрипт для проверки номеров в списке:
typeset -A numList
for num in $( < rand.txt )
do
numList[$num]=$num
done
if [[ -n ${numList[$1]} ]]
then
echo "do what I want"
else
echo 'not interesting'
fi
Если вы не хотите отдельный файл с номерами, это также работает:
typeset -A numList
(
cat <<EOF
72
107
104
82
20
21
EOF
) | while read num
do
numList[$num]=$num
done
if [[ -n ${numList[$1]} ]]
then
echo "do what I want"
else
echo 'not interesting'
fi
Они также работают на Bash.
Я нашел решение
case $1 in ( 50 | 28 | 500 | 700 | 1 | 47 )
echo ¨Found!¨
;;
*)
echo ¨NOT found!¨
;;
esac
Спасибо!