2017-01-03 101 views
0

我已经得到了我应通过一定的价值非交互如何以非交互方式将值传递给PS3提示?

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

PS3='Select the platform to use:' 

前输出如下所示

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提示符。任何帮助或建议?

回答

1

可以使用select内置实现这一目标,

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~/.bashrcPS3价值,使其永久化。另外值得加点,select不是POSIX兼容选项,可能无法跨平台移植。

您可以在单一脚本中调用此方法并在另一个脚本中调用的方式是将上述代码包装在函数中,并将其嵌入到另一个文件中。在原始脚本上,例如说script1.sh,在调用脚本函数包装为

#!/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

#!/bin/bash 

source ./script1.sh 
optselect 1   # Calling the script with argument '1' 
+0

感谢您的帮助。但是,我需要从另一个脚本调用此脚本。我需要从调用脚本 –

+0

@SathishKumar将值传递给'SELECT':将其作为参数传递给其他脚本,并使用'$(seq 3)'中的$ select $ 1,希望你能做到这一点 – Inian

+0

谢谢。让我试试 –

0

使用case语句select语句中。 case语句将使用continue返回select语句的顶部,如果进行了无效选择。否则,使用breakcase语句退出select循环。

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 
相关问题