在 bash 脚本中,您将如何编写以下脚本?
USER_INPUT="1 2 3 4 5"
echo "Please select one of the following values: $USER_INPUT"
Prompt the user to choose a value in $USER_INPUT.
echo "command <user input> <iterate through remaining numbers not selected from $USER_INPUT>
Run Code Online (Sandbox Code Playgroud)
例如,如果用户选择“2”,则运行以下命令。
command 2 1
command 2 3
command 2 4
command 2 5
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
values=( "Why is" "a raven" "like a" "writing desk?" )
select word in "${values[@]}"; do
if [[ -z "$word" ]]; then
printf '"%s" is not a valid choice\n' "$REPLY" >&2
else
user_in="$(( REPLY - 1 ))"
break
fi
done
for (( i = 0; i < ${#values[@]}; ++i )); do
if (( i != user_in )); then
printf 'You did not pick "%s"\n' "${values[$i]}"
fi
done
Run Code Online (Sandbox Code Playgroud)
该select命令将为用户提供一个选择菜单。选择菜单项后,$REPLY将是用户输入的数字,并将$word是菜单中与该数字对应的值。如果做出无效选择,$word将为空。
第二部分$USER_INPUT使用for. bash如果我们遇到与所选值相对应的索引,我们会跳过它。我们打印出数组中的所有其他值。
显然,您可以在循环中执行命令:
for (( i = 0; i < ${#values[@]}; ++i )); do
if (( i != user_in )); then
printf 'command %s %s\n' "$user_in" "${values[$i]}"
fi
done
Run Code Online (Sandbox Code Playgroud)
甚至
for (( i = 0; i < ${#values[@]}; ++i )); do
if (( i != user_in )); then
command "${values[$user_in]}" "${values[$i]}"
fi
done
Run Code Online (Sandbox Code Playgroud)
它将尝试将实际的东西作为$values命令运行。
测试它(使用循环的第一个版本):
$ bash script.sh
1) Why is
2) a raven
3) like a
4) writing desk?
#? B
"B" is not a valid choice
#? 0
"0" is not a valid choice
#? 3
You did not pick "Why is"
You did not pick "a raven"
You did not pick "writing desk?"
Run Code Online (Sandbox Code Playgroud)
如果您有能力修改 $values,并且只想输出用户未选择的内容,那么脚本的第二部分(循环)可以替换为
unset values[$user_in]
printf 'You did not pick "%s"\n' "${values[@]}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3919 次 |
| 最近记录: |