我正在编写一个脚本,将数据集从服务器下载到本地主机上。我想提示用户从服务器上可用的数据集中选择数据集。到目前为止,我已经尝试了以下命令
select DATASET in $(ssh -i ssh_key user@server "ls -1 /path/to/datasets/"); do break; done
1) dataset01
2) test1
3) test2
#?
这将生成我想要的可用数据集列表,并在用户选择显示的值时将数据集文件名放入DATASET目录。
但是,这不会对所选条目进行任何验证。如果用户输入的值不在列表中,我写的select语句很乐意接受它并继续前进。
如何调整此命令以检查所选值是否在所显示的选项范围内?
答案 0 :(得分:1)
只有在数据集不为空时才能中断,例如
PS3="Enter number or 0 for exit> " #better prompt for the select
values=($(seq -f "set%g" 20)) #simulating 20 datasets
select dataset in "${values[@]}"
do
[[ "$dataset" ]] && break #existing dataset selected, break
(( "${REPLY}" == 0 )) && exit #0 - exit the script
done
echo =$dataset=
答案 1 :(得分:0)
将select
打包成
DATASET=
while [[ ! $DATASET ]] ; do
select DATASET in ...
done
man bash
说:
如果该行包含该数字 对应于所显示的单词之一,然后设置NAME 那个词。