如何通过索引值在bash中使用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
".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
我想知道如何才能做到这一点,在 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
我做了很多研究,但我不是最擅长 bash(但我正在学习)。对不起,如果解决方案很明显,但我会很感激你的帮助,你。
回答
来自help option:
读取的行保存在变量中
REPLY。
- If you type in `3` and press enter, then REPLY will contain `3` and not `.css (CSS)`, so this works (you have to subtract 1 though, since `select` shows 1-based while bash arrays are 0-based)