📜  Linux 中的 select 命令及示例(1)

📅  最后修改于: 2023-12-03 14:43:56.956000             🧑  作者: Mango

Linux 中的 select 命令及示例

select 命令是 Linux Shell 编程中的一种流程控制命令,它能够循环等待一组文件描述符(通常是测试键盘输入)的状态改变,一旦发生变化,便执行相应的操作。 select 命令的语法与 C 语言中的 switch 语句类似,可以用于选择不同的操作。下面是 select 命令的基本语法:

select var in wordlist
do
    command1
    command2
    ……
    commandN
done
  • var:循环中赋值给用户选择的值的变量名,可以是任意合法的变量名,建议使用小写字母。
  • wordlist:列表中的每个元素都会在每次循环中显示给用户。支持的元素格式为wordword1..word2 ,元素之间使用空格分隔。
  • do:开始选择分支,dodone 之间的命令块将执行循环体内的命令,如果用户选择了合适的操作,则立即退出循环。
  • command:在每个循环中执行的命令。

下面是一个简单的 select 命令示例,用于从菜单中选择一个操作:

#!/bin/bash
select opt in "Show Date" "Show Disk space" "Show User" "Quit"
do
    case $opt in
        "Show Date")
            date
            ;;
        "Show Disk space")
            df -h
            ;;
        "Show User")
            whoami
            ;;
        "Quit")
            break
            ;;
        *)
            echo "Invalid option"
            ;;
    esac
done

运行上面的脚本,会显示一个菜单,按照菜单编号选择一个操作即可。如果选择“Quit”,则循环会终止。

select 命令的一个常见用途是等待用户输入。当循环等待输入时,用户可以按下键盘上的任意键来输入,直到按下 Ctrl+C 停止循环。

下面是一个用于等待用户输入的示例:

#!/bin/bash
echo "Enter your choice: "
select name in "Bob" "Sue" "Jim" "Quit"; do
    case $name in
        "Bob")
            echo "Hello Bob!"
            ;;
        "Sue")
            echo "Hello Sue!"
            ;;
        "Jim")
            echo "Hello Jim!"
            ;;
        "Quit")
            exit
            ;;
        *)
            echo "Invalid option"
            ;;
    esac
done

运行上面的脚本,当用户输入Ctrl + C 时,循环会终止。

注意,select 命令只能用于交互式 Shell,不能用于非交互式 Shell。在文件输入流上等待输入的命令通常使用 read 命令。