【问题标题】:Shell script chosing multiple repeats or exitShell脚本选择多次重复或退出
【发布时间】:2014-11-29 18:17:40
【问题描述】:

我有这个代码:

echo "Select"
select yn in "YES" "NO"; do
case $yn in
YES ) break;;
NO ) exit;;
esac
done

我想做什么,是询问用户某事(select),如果用户输入 YES,然后执行 YES 的操作(break),如果用户输入 NO,那么它执行 NO 的操作(@987654324 @) 我该怎么做?

【问题讨论】:

    标签: linux shell select terminal case


    【解决方案1】:

    我不确定您要达到什么目的,但是如果您希望菜单重复多次,请删除 break 以便它循环,如果您希望用户能够输入文字 YES 而不是数字1 并让它执行,你需要抓住 REPLY 并考虑到这一点。

    所以...要将这两者结合在一起,试试这个脚本:

    #!/bin/bash
    repeat() {
            echo "Repeating";
    }
    end() {
            echo "Exit";
            exit;
    }
    echo "Select"
    select yn in "YES" "NO"; do
            if [[ -z "$yn" ]]; then
                    # user entered text instead of the number
                    yn="$REPLY"
            fi
            case $yn in
                    YES )
                    repeat
                    ;;
                    NO )
                    end
                    ;;
                    * )
                    echo -e "Sorry, \"${yn}\" is not supported.\nTry again."
                    ;;
            esac
    done
    

    【讨论】:

    • 我试过了,它说: Select proba1.sh: 10: proba1.sh: select: not found proba1.sh: 11: proba1.sh: [[: not found -e sorry, ""不支持。再试一次。 proba1.sh:26:proba1.sh:语法错误:“完成”意外
    • 奇怪,你运行的是什么版本的 bash?我将它复制粘贴到 bsd 和 linux 上的脚本中,它只是工作.. 那里的换行符可能有些奇怪,尝试从那里的pastebin.com/raw.php?i=k4vgm6Hs 获取它,第 10 行的选择与您的脚本中的相同。
    • GNU bash,版本 4.3.11(1)-release (x86_64-pc-linux-gnu)
    • 您要解决的问题是什么?是重复还是可以输入文字?
    • 这是我测试它的方式顺便说一句,不确定你的方法是否不同:pastebin.com/raw.php?i=sq5jNEpx
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多