select 是一个类似于 for 循环的语句。
格式:select name [ in word ] ; do list ; done

select 变量 in 选项 1 选项 2; do 
    break
done
#!/bin/bash
select mysql_version in 5.1 5.6; do 
    echo $mysql_version
done
# bash test.sh 
1) 5.1
2) 5.6
#? 1
5.1
#? 2
5.6

用户输入编号会直接赋值给变量 mysql_version。作为菜单用的话,循环第二次后就不再显示菜单了,并不能满足需求。
在外面加个死循环,每次执行一次 select 就break 一次,这样就能每次显示菜单了:

#!/bin/bash 
while true; do
select mysql_version in 5.1 5.6; do 
        echo $mysql_version
        break
    done
done
# bash test.sh 
1) 5.1
2) 5.6
#? 1
5.1
1) 5.1
2) 5.6
#? 2
5.6
1) 5.1
2) 5.6

如果再判断对用户输入的编号执行相应的命令,如果用 if 语句多分支的话要复杂许多,用case 语
句就简单多了。

#!/bin/bash
PS3="Select a number: " 
while true; do
    select mysql_version in 5.1 5.6 quit; do 
        case $mysql_version in
            5.1)
                echo "mysql 5.1" 
                break
                ;;
            5.6)
                echo "mysql 5.6" 
                break
                ;;
            quit)
                exit
                ;;
            *)
                echo "Input error, Please enter again!" 
                break
            esac
    done
done
# bash test.sh 
1) 5.1
2) 5.6
3) quit
Select a number: 1 
mysql 5.1
1) 5.1
2) 5.6
3) quit
Select a number: 2 
mysql 5.6
1) 5.1
2) 5.6
3) quit
Select a number: 3

如果不想用默认的提示符,可以通过重新赋值变量 PS3 来自定义。这下就比较完美了!