首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何非交互地将值传递给PS3提示?

如何非交互地将值传递给PS3提示?
EN

Stack Overflow用户
提问于 2017-01-03 07:19:29
回答 2查看 522关注 0票数 0

我有一个交互式脚本,应该以非交互的方式传递一些值。

交互式脚本使用“PS3”变量打印“选项列表”

代码语言:javascript
复制
PS3='Select the platform to use:'

输出如下图所示

代码语言:javascript
复制
echo 'Linux Build System initializing'

 1) Linux PC based
 2) ABC 1
 3) XYZ 4

Select the platform to use: <waits for user input>

我想把这个值传递给PS3提示符。有什么帮助或建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-03 07:32:22

您可以使用内置的select来实现这一点,

代码语言:javascript
复制
PS3='Select the platform to use: '
select choice in $(seq 3)
do
    [[ $choice -eq 1 ]] && echo "Linux PC based"
    [[ $choice -eq 2 ]] && echo "ABC 1"
    [[ $choice -eq 3 ]] && echo "XYZ 4"
    break
done

确保export~/.bashrc中的PS3值使其永久化。另外,值得补充一点的是,select不是POSIX兼容的选项,而且可能无法跨平台移植。

您可以在一个脚本中调用它,在另一个脚本中调用它,方法是将上面的代码包装在一个函数中,然后在另一个文件中调用它。在原始脚本上,例如script1.sh,将函数包装为

代码语言:javascript
复制
#!/bin/bash

function optselect() {
    arg1=$1
    select arg1 in $(seq 3)
    do
        [[ $arg1 -eq 1 ]] && echo "Linux PC based"
        [[ $arg1 -eq 2 ]] && echo "ABC 1"
        [[ $arg1 -eq 3 ]] && echo "XYZ 4"    
        break
    done
}

然后在调用脚本中,例如script2.sh

代码语言:javascript
复制
#!/bin/bash

source ./script1.sh
optselect 1            # Calling the script with argument '1'
票数 1
EN

Stack Overflow用户

发布于 2017-01-03 13:00:36

case语句中使用select语句。如果选择无效,case语句将使用continue返回select语句的顶部。否则,在break语句之后使用case退出select循环。

代码语言:javascript
复制
PS3='Select the platform to use: '
select choice in "Linux PC based"  "ABC 1" "XYZ 4"
do
    case $choice in
      1) echo "You chose Linux" ;;
      2) echo "You chose ABC" ;;
      3) echo "You chose XYZ" ;;
      *) continue
    esac
    break
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41438335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档