概述:
我希望我的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