Я бы предложил использовать оператор case
. Это bash-версия того, что в программировании известно как оператор switch . Они, как правило, быстрее, чем оператор if-then-else, поскольку они, скорее всего, реализованы с помощью таблицы поиска или хэш-списка.
Кроме того, оптимизированная реализация может выполняться намного быстрее, чем альтернативная, поскольку она часто реализуется с использованием индексированной таблицы ветвей. Например, решение о потоке программы, основанное на значении одного символа, если оно правильно реализовано, значительно эффективнее альтернативы, значительно сокращая длину пути инструкций. При реализации как таковой оператор switch по сути становится идеальным хешем.
источник: Википедия
Интересное сравнение можно найти здесь: Что быстрее двух случаев или если?
Чтобы обратиться к вашему коду, вы в цикле формы
for i in $(cat file); do
...
done
следует переписать. Когда вы читаете файл слово за словом, вы должны написать что-то вроде:
while read -r line; do
for i in $line; do
...
done
done < file
Вы, если-то-еще, затем переписывается как:
case "$i" in
1) command1; command2; command3 ;;
2) command4; command5; command6 ;;
...
100) command315; command316;;
esac