• bash上下键选择选项demo脚本


    效果如下:

     废话不多说,上代码:

    1. #!/bin/bash
    2. options=("111" "222" "333" "444") # 选项列表
    3. options_index=0 # 默认选中第一个选项
    4. options_len=${#options[@]}
    5. echo "请用上下方向键进行选择,空格键选中/取消,回车键确认结果"
    6. # 定义一个数组来存储选中的结果
    7. selected=()
    8. for ((i=0; i<${options_len}; i++));do
    9. selected[$i]=0
    10. done
    11. # 渲染选项列表
    12. render_options() {
    13. for i in "${!options[@]}"; do
    14. # 首先渲染已经选中的选项
    15. if [ ${selected[$i]} -eq 1 ];then
    16. if [ $i -eq $options_index ]; then
    17. echo -e "\033[1;41;34m${options[$i]}\033[0m" # 已选中,已选择
    18. else
    19. echo -e "\033[1;41;33m${options[$i]}\033[0m" # 已选中,未选择
    20. fi
    21. elif [ $i -eq $options_index ]; then
    22. echo -e "\033[1;34m${options[$i]}\033[0m" # 未选中,已选择
    23. else
    24. echo "${options[$i]}" # 未选中,未选择
    25. fi
    26. done
    27. }
    28. # 初始渲染
    29. render_options
    30. # 为了让read能读到空格键
    31. IFS_store=$IFS
    32. IFS=''
    33. while true; do
    34. read -s -n 1 key # 读取单个按键输入,不显示在终端上
    35. case $key in
    36. "A") # 上箭头键
    37. if [ $options_index -gt 0 ]; then
    38. options_index=$((options_index - 1))
    39. # 在第一行按上键,到最后一行
    40. elif [ $options_index -eq 0 ]; then
    41. options_index=$((${options_len} - 1))
    42. fi
    43. ;;
    44. "B") # 下箭头键
    45. if [ $options_index -lt $(( ${options_len} - 1 )) ]; then
    46. options_index=$((options_index + 1))
    47. # 在最后一行按下键,到第一行
    48. elif [ $options_index -eq $(( ${options_len} - 1 )) ]; then
    49. options_index=0
    50. fi
    51. ;;
    52. " ") # 空格键
    53. # selected[$options_index]的值,0、1切换
    54. selected[$options_index]=$((1 - ${selected[$options_index]}))
    55. ;;
    56. "") # 回车键
    57. break
    58. ;;
    59. esac
    60. tput cuu ${options_len} # 光标移动回到选项列表的开头
    61. tput ed # 清除当前行
    62. render_options # 重新渲染选项列表
    63. done
    64. # 恢复IFS变量
    65. IFS=$IFS_store
    66. # 最后选中的所有结果
    67. result=()
    68. for ((i=0; ido
    69. if [ ${selected[$i]} -eq 1 ];then
    70. result+=(${options[$i]})
    71. fi
    72. done
    73. echo "选中:${result[@]}"

  • 相关阅读:
    【前端面试题】有关html和css的前端面试27问
    云安全:企业上云后不可忽视的安全挑战与解决方案
    CS231n课程笔记:Leture3 Loss Functions and Optimization
    第1次 更多的bash shell命令
    基于weixin小程序乡村旅游系统的设计
    一维数组笔试题及其解析
    MySQL数据库
    基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32
    Android系统实现多网共存且能独立上外网
    程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房
  • 原文地址:https://blog.csdn.net/CHEndorid/article/details/133752507