Estou listando arquivos de uma pasta e solicitando uma entrada do usuário para selecionar um dos arquivos.
files=$(ls ~/VideoExtract/*.avi)
i=1
for j in $files
do
echo "$i.$j"
file[i]=$j
i=$(( i + 1 ))
done
echo ""
echo ""
read -p "Enter the serial number from the above list : " input
clear
Suponha que se eu tiver 3 arquivos, o código acima lista todos os três arquivos listados com números de série 1,2,3. Eu quero validar se o usuário fornecer a entrada correta e não quebrar o código até receber uma entrada correta. Para fazer isso, usei um loop while após o código acima
while [[ "$input" =~ ["$i"] ]]
do
echo "Please provide a serial number from the list given below."
files=$(ls ~/VideoExtract/*.avi)
i=1
for j in $files
do
echo "$i.$j"
file[i]=$j
i=$(( i + 1 ))
done
read -p "Enter the serial number from the above list : " input
done
Isso retorna a lista de arquivos novamente. O problema é que, se eu tiver 3 arquivos, e se eu digitar 4, o loop continuará a funcionar, mas se eu fornecer 5, o loop será interrompido e passará para a próxima linha do código. Não tenho certeza se o problema está na linha
while [[ "$input" =~ ["$i"] ]]
ou
i=$(( i + 1 ))
Em vez de =~
, tentei com !=
e ! $input == $i
e outras combinações semelhantes, como com e sem [] para $ i. Nada parece funcionar.
Como executo o loop while até o momento em que o usuário fornece uma entrada válida dentro do intervalo de $ i.