这个代码不使用select
,但确实差不多就是你want-
#! /bin/bash
files=("file1" "file2" "file3" "file4" "Quit")
menuitems() {
echo "Avaliable options:"
for i in ${!files[@]}; do
printf "%3d%s) %s\n" $((i+1)) "${choices[i]:- }" "${files[i]}"
done
[[ "$msg" ]] && echo "$msg"; :
}
prompt="Enter an option (enter again to uncheck, press RETURN when done): "
while menuitems && read -rp "$prompt" num && [[ "$num" ]]; do
[[ "$num" != *[![:digit:]]* ]] && ((num > 0 && num <= ${#files[@]})) || {
msg="Invalid option: $num"; continue
}
if [ $num == ${#files[@]} ];then
exit
fi
((num--)); msg="${files[num]} was ${choices[num]:+un-}selected"
[[ "${choices[num]}" ]] && choices[num]="" || choices[num]="x"
done
printf "You selected"; msg=" nothing"
for i in ${!files[@]}; do
[[ "${choices[i]}" ]] && { printf " %s" "${files[i]}"; msg=""; }
done
echo "$msg"
人口统计学
$ ./test.sh
Avaliable options:
1) file1
2) file2
3) file3
4) file4
5) Quit
Enter an option (enter again to uncheck, press RETURN when done): 1
Avaliable options:
1x) file1
2) file2
3) file3
4) file4
5) Quit
file1 was selected
Enter an option (enter again to uncheck, press RETURN when done): 2
Avaliable options:
1x) file1
2x) file2
3) file3
4) file4
5) Quit
file2 was selected
Enter an option (enter again to uncheck, press RETURN when done): 3
Avaliable options:
1x) file1
2x) file2
3x) file3
4) file4
5) Quit
file3 was selected
Enter an option (enter again to uncheck, press RETURN when done): 1
Avaliable options:
1) file1
2x) file2
3x) file3
4) file4
5) Quit
file1 was un-selected
Enter an option (enter again to uncheck, press RETURN when done):
You selected file2 file3
你只想补充的情况下'1)','2)','3)'?或者你需要更复杂的东西? – 2012-08-11 05:43:07
它会更复杂。 $ list包含特定目录中的所有文件。添加和删除文件到目录将改变案件号码。我宁愿每次都不更新shell脚本。 – wwwuser 2012-08-11 05:46:12
也许你应该考虑另一种攻击计划,或者使用“对话”或者更复杂的语言。 – 2012-08-11 06:21:42