我有一个交互式脚本,应该以非交互的方式传递一些值。
交互式脚本使用“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提示符。有什么帮助或建议吗?
发布于 2017-01-03 07:32:22
您可以使用内置的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在~/.bashrc中的PS3值使其永久化。另外,值得补充一点的是,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'发布于 2017-01-03 13:00:36
在case语句中使用select语句。如果选择无效,case语句将使用continue返回select语句的顶部。否则,在break语句之后使用case退出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
donehttps://stackoverflow.com/questions/41438335
复制相似问题