select pode ser usado para loops. Semelhante a outros loops, select depende do julgamento condicional na parte superior ou inferior do bloco de código para determinar o branch do programa. Em termos de exibição de vários menus e entrada do usuário, a seleção pode facilmente produzir menus para os usuários escolherem e usarem. A instrução select é geralmente usada com a instrução case, e seu formato de sintaxe é:
select choice in menu_1,menu_2,menu_3...
do
case "$choice" in
menu_1)
cmd
;;
menu_2)
cmd
;;
...
menu_m)
break
;;
menu_n)
exit
;;
esac
done
Exemplo de uso: exibir informações relacionadas ao sistema do computador
#! /bin/bash
select choice in disk_partition file_sys cpu_load mem_util quit
do
case "$choice" in
disk_partition)
fdisk -l
;;
file_sys)
df -h
;;
cpu_load)
uptime
;;
mem_util)
free -m
;;
q)
break
;;
*)
echo "error"
exit
;;
esac
done
Resultados de:
Pode-se ver nos resultados de execução acima que as opções do menu aparecem após a execução do script de shell e só aparecem uma vez. Portanto, se você precisar ver muitas opções de uma vez, pode não ser tão conveniente. Combinado com o loop while, você pode exibir as opções do menu sempre que entrar. A codificação é a seguinte:
#! /bin/bash
# PS3 = "Your choice is[5 for exit]:"
while true;do
select choice in disk_partition file_sys cpu_load mem_util quit
do
case "$choice" in
disk_partition)
fdisk -l
break
;;
file_sys)
df -h
break
;;
cpu_load)
uptime
break
;;
mem_util)
free -m
break
;;
quit)
break
;;
*)
echo "error"
exit
;;
esac
done
echo "-----------------------------------------------------------------------"
done
Ao adicionar um loop while fora do select, a instrução select é executada uma vez para cada correspondência na instrução case, e a instrução select é então repetida. O resultado da execução é mostrado na figura abaixo. Após cada entrada, o menu será impresso uma vez