bash 脚本实现提示确认:任意键继续、输入Y/N继续

0 场景描述

你写了一个脚本,其中作了一些假设,需要提示给用户,让用户确认。这时,就需要写一个“提示确认”功能。

有两种常见的交互方式:(1)按任意键继续;(2)输入特定字符后继续(一般是 Y/N)。

这里把两种方式的 demo 代码都贴出来。

1 任意键继续

#!/bin/bash
echo " 开始执行操作. ... "
get_char()
{
    SAVEDSTTY=`stty -g`
    stty -echo
    stty cbreak
    dd if=/dev/tty bs=1 count=1 2> /dev/null
    stty -raw
    stty echo
    stty $SAVEDSTTY
}

echo "Press any key to continue..."
echo " CTRL+C break command bash ..." # 组合键 CTRL+C 终止命令!
char=`get_char`
echo " 操作完成 .... "

 

2 输入 Y/N 继续

这里又分两种情况:(1)只接收一次输入,不论是什么字符,立即退出(2)循环接收输入,直到用户输入 Y(Yes) 或 N(No)。

2.1 一次输入

#!/bin/bash

read -r -p "Are You Sure? [Y/n] " input

case $input in
    [yY][eE][sS]|[yY])
        echo "Yes"
        ;;

    [nN][oO]|[nN])
        echo "No"
        ;;

    *)
        echo "Invalid input..."
        exit 1
        ;;
esac

 2.2 循环输入

#!/bin/bash

while true
do
    read -r -p "Are You Sure? [Y/n] " input

    case $input in
        [yY][eE][sS]|[yY])
            echo "Yes"
            break
            ;;

        [nN][oO]|[nN])
            echo "No"
            break
            ;;

        *)
            echo "Invalid input..."
            ;;
    esac
done