如何让用户从数组中选择一个值,并将其传递到KSH中的变量中



概述:
我希望我的KSH脚本测试目录中是否存在某些文件,向用户提供这些文件的列表和一个数字。然后,用户选择他们想要的数字,并将数组中的相关值分配给变量。



到目前为止,我有以下内容:

### Create test files in directory ####
touch ABCDEF.jar
touch BCDEFG.jar
touch CDEFGH.jar
touch DEFGHI.jar
touch EFGHIJ.jar
touch FGHIJK.jar
touch GHIJKL.jar

set -A JARS ` ls -1 | grep .jar | cut -d'.' --complement -f2-`
for i in ${JARS[@]}; do echo "Number) $i"; done

这将从数组中返回以下列表:

Number) ABCDEF
Number) BCDEFG
Number) CDEFGH
Number) DEFGHI
Number) EFGHIJ
Number) FGHIJK
Number) GHIJKL

首先,我想用一个按顺序增加数字的函数来代替占位符"Number)",得到这样的东西:

1) ABCDEF
2) BCDEFG
3) CDEFGH
4) DEFGHI
5) EFGHIJ
6) FGHIJK
7) GHIJKL

然后,我想让脚本根据用户选择的数字读取用户输入,并将数组中的正确值分配给新变量"JAR_ID"



从表面上看,这似乎是一个简单的问题。然而,我似乎无法理解如何以合乎逻辑的方式做到这一点。

任何想法,不胜感激!

TIA哈士奇。

如果你不介意列表中的完整文件名,那么这就行了。

select JAR in *.jar; do
        export NEW_PATCHID=$JAR
        echo $NEW_PATCHID
        REPLY=''
        break
done

如果你介意(这个例子表明你可能会),并且你想去掉.jar(我假设cut就是这个意思,尽管cut -d. -f1看起来更简单,awk -F . '{print $1}'也更简单,尽管它更长),下面的方法可以安全地工作。

jars=(*.jar)
select JAR in "${jars[@]%.jar}"; do
        export NEW_PATCHID=$JAR
        echo $NEW_PATCHID
        REPLY=''
        break
done

多亏了Etan朝着正确的方向努力,我能够使用以下代码做我需要的事情:

#!/bin/ksh
type_prompt='Select JAR> '
PS3="${type_prompt}"
select JAR in `ls -1 | grep .jar | cut -d'.' --complement -f2-` QUIT
do
        export NEW_PATCHID=$JAR
        echo $NEW_PATCHID
        REPLY=''
        break
done


这正是我所需要的,并且以我想要的方式工作。再次感谢Etan

相关内容

  • 没有找到相关文章

最新更新