交互式 shell 脚本框架(bash)

交互式 shell 脚本框架(bash)

我当前的项目在 Linux 机器上运行测试系统(有 9 个活动屏幕)

整个团队都熟悉如何启动测试等,但不太熟悉检查进度、移动文件、强制停止测试等的命令。

我想编写一个脚本,它可以将有用的检查组合在一起,只需按下一个键即可启动它们。我可以用 Perl 轻松完成此操作,但如果它是 shell 脚本 (bash),则更一致。

虽然我的 shell 经验有限,但我想要一个其他人可以轻松扩展的示例脚本(即框架)。

Wait for Key
Perform action
  Possibly accept further input for action
Repeat

如果没有收到密钥,则奖励是每 n 分钟运行一次操作。

答案1

根据您的描述,这里有一些简单的事情(感谢 Dennis 的评论):

while true; do
    # 300 is the time interval in seconds
    if read -n 1 -t 300; then
        case $REPLY in
        a)
            # command(s) to be run if the 'a' key is pressed
            echo a;;
        b)
            # command(s) to be run if the 'b' key is pressed
            echo b;;
        esac
    else
        # command(s) to be run if nothing is pressed after a certain time interval
        echo
    fi
done

这是我以前想过的替代方案,尽管我不记得为什么case一开始就决定不这么做:

# define functions here
a_pressed() {
    # command(s) to be run if the 'a' key is pressed
}

b_pressed() {
    # commands for if 'b' is pressed
}

# etc.

nothing_pressed() {
    # command(s) to be run if nothing is pressed after a certain time interval
}

while true; do
    # 300 is the time interval in seconds
    if read -n 1 -t 300; then
        fn_name="${REPLY}_pressed"
        declare -pF | grep -q "$fn_name" && ${fn_name}
    else
        nothing_pressed
    fi
done

无论哪种方式,这都会处理按键,并且在 5 分钟内没有执行任何操作时自动调用操作。

答案2

我听说过的唯一两个是 Bashinator 和 NRG Framework

核辐射防护系统

巴什纳托

答案3

感谢 David Zaslavsky - 满足了我的要求。

建议的调整(我无法编辑答案)或格式评论

添加外壳类型

#!/bin/bash 

参数化时间并允许提示(但超时除外)。另外,似乎 -N 应该是 -n

# Will wait for this interval, then run default action 
DELAY=30 
while true; do 
    echo "Command list here..." 
    while true; do 
        if read -n 1 -t ${DELAY}; then 
            fn_name="${REPLY}_pressed" 
            declare -pF | grep -q "$fn_name" && ${fn_name} 
            break 
        else 
            default_action 
        fi 
    done 
done 

相关内容