如何通过索引值在bash中使用case语句?

Hus*_*ail 0 bash shell terminal

我有以下代码,其中用户选择文件类型,然后我为每种情况运行某些代码:

#!/bin/bash

PS3='Please enter your file type choice: '

options=(".c (C)" \
        ".cpp (C++)" \
        ".css (CSS)" \
        ".html (HTML)" \
        ".java (Java)" \
        ".ms (Groff)") 

select option in "${options[@]}" # Asks for the option choice
do
    case "${option}" in
        ".c (C)") # C programming file
            echo "C OPTION SELECTED"
            ;;
        ".cpp (C++)") # C++ programming file
            echo "C++ OPTION SELECTED"
            ;;
        ".css (CSS)") # CSS programming file
            echo "CSS OPTION SELECTED"
            ;;
        ".html (HTML)") # HTML File
            echo "HTML OPTION SELECTED"
            ;;
        ".java (Java)") # Java programming file
            echo "JAVA OPTION SELECTED"
            ;;
        ".ms (Groff)") # Groff markup file
            echo "GROFF OPTION SELECTED"
            ;;
        *) echo "invalid option $option"
           ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

我想知道如何才能做到这一点,在 case 语句中,您可以通过数组的索引而不是数组的值来处理每个案例:

#!/bin/bash

PS3='Please enter your file type choice: '

options=(".c (C)" \
        ".cpp (C++)" \
        ".css (CSS)" \
        ".html (HTML)" \
        ".java (Java)" \
        ".ms (Groff)") 

select option in "${options[@]}" # Asks for the option choice
do
    case "${option}" in
        1) # C programming file
            echo "C OPTION SELECTED"
            ;;
        2) # C++ programming file
            echo "C++ OPTION SELECTED"
            ;;
        3) # CSS programming file
            echo "CSS OPTION SELECTED"
            ;;
        4) # HTML File
            echo "HTML OPTION SELECTED"
            ;;
        5) # Java programming file
            echo "JAVA OPTION SELECTED"
            ;;
        6) # Groff markup file
            echo "GROFF OPTION SELECTED"
            ;;
        *) echo "invalid option $option"
            ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

我做了很多研究,但我不是最擅长 bash(但我正在学习)。对不起,如果解决方案很明显,但我会很感激你的帮助,你。

cho*_*oba 5

来自help option

读取的行保存在变量中REPLY

  • 如果你输入 `3` 并按 Enter,那么 REPLY 将包含 `3` 而不是 `.css (CSS)`,所以这是有效的(不过你必须减去 1,因为 `select` 显示从 1 开始,而 bash 数组是从 0 开始的) (3认同)