ZSH - Как я могу создать функцию, которая задает несколько вопросов, каждый из которых приводит к разным конечным результатам?Как выбрать свою собственную историю приключений - PullRequest
0 голосов
/ 16 декабря 2018

Во-первых, я прошу прощения, поскольку я уверен, что это спросили.Но я искал несколько часов и ничего не получил.Я работаю над своей первой настоящей функцией, и 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 Звезды] [Подстрекательство Кровавого + Сила] [Рукавицы Когтя Смерти] по цене [500].Что-то в этом роде.

1 Ответ

0 голосов
/ 16 декабря 2018

С циклами вам нужно условие выхода.Текущее ваше состояние является «истинным», что означает, что оно всегда будет длиться вечно.Обычно вы создаете цикл с неким выражением, которое, как ожидается, изменится в цикле.Вы также можете использовать «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."
...