首先,我真的很抱歉,因为我肯定有人问过这个问题。但我已经找了好几个小时了但一无所获。我正在开发我的第一个真正的函数,ZSH或Bash甚至是我最了解的函数。我正在尝试创建一个简单的函数,它将提出一系列问题,将答案放在一个变量中,并将它们合并在一起以创建最终结果,从而节省时间并减少我最近所做的打字量。这是为最近推出的游戏Fallout 76准备的。我想创建一个交互式库存文件,如果我输入fo76 addweapon,它会问我关于这个武器的问题,并将结果打印出来,以便快速复制粘贴到交易社区中。
我尝试了许多不同的变体,我已经找到了最接近我的,但它不起作用。假设已经预先设置了模式变量。我做错了什么?下一个问题的下一步是什么,它将包括一个效果列表,允许我根据我在上一个答案中选择的数字来选择它们?
if [[ $mode="$MODE_ADD_WEAPON" ]]; then
title="Add Weapon"
prompt="How many stars does this weapon have?"
options1=("1" "2" "3" "4" "5" "Quit")
PS3="$prompt "
select opt in "{$options1[@]}"; do
if [[ -z $opt ]]; then
echo "$REPLY is not a valid option, try again"
REPLY=
elif [[ $REPLY="$1" ]]; then
RESULT="$REPLY Star ";
fi
while true; do
STARS="$RESULT"; echo "$STARS"
done
prompt="What prefix does this $STARS weapon have?"
options2=("Anti-armor" "Assassin's" "Berserker's" "Bloodied" "Exterminator's" "Furious" "Ghoul Slayer's" "Hunter's" "Instigating" "Junkie's" "Mutant's" "Mutant Slayer's" "Nocturnal" "Stalker's" "Suppressor's" "Troubleshooter's" "Vampire's" "Zealot's")
PS3="$prompt "
select opt in "{options2[@]}"; do
if [[ -z $opt ]]; then
echo "$REPLY is not a valid option, try again"
REPLY=
elif [[ $REPLY=$REPLY ]]; then
echo $REPLY; RESULT="$STARS $REPLY"
fi
done
while true; do
PREFIX="$REPLY"; echo "$STARS $PREFIX"
done
done
fi
}我目前的计划是将每个结果应用于它自己的变量,并在最后响应它们,看起来像3星死亡之爪Gauntlet,定价为500。一些类似的东西。
发布于 2018-12-16 10:02:58
对于循环,您需要一个退出条件。当前你的条件是"true“,这意味着它将永远循环。通常,您使用某种表达式创建一个循环,该表达式预计会在循环中发生变化。您还可以使用"break“退出循环
下面是来自http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_02.html的一个示例
#!/bin/bash
# Calculate the average of a series of numbers.
SCORE="0"
AVERAGE="0"
SUM="0"
NUM="0"
while true; do
echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE;
if (("$SCORE" < "0")) || (("$SCORE" > "100")); then
echo "Be serious. Common, try again: "
elif [ "$SCORE" == "q" ]; then
echo "Average rating: $AVERAGE%."
break
else
SUM=$[$SUM + $SCORE]
NUM=$[$NUM + 1]
AVERAGE=$[$SUM / $NUM]
fi
done
echo "Exiting."https://stackoverflow.com/questions/53798632
复制相似问题