Использование чисел в String Array для пользовательского ввода с использованием bash - PullRequest
2 голосов
/ 30 апреля 2020

У меня есть текстовый файл, который я пытаюсь прочитать в массив, используя Bash. Вот содержимое текстового файла:

Vol12
Vol0
Vol2
Vol21

Я хочу извлечь число из вышеуказанной строки и представить его пользователю, чтобы выбрать число для ввода выбора, например:

12 - Vol12
0  - Vol0
2  - Vol2
21 - Vol21

Пользователь вводил бы 12, чтобы выбрать Vol12, или 2, чтобы выбрать Vol2, и использовал выбор для выполнения дальнейших действий.

Я искал, как это сделать, но вот что у меня есть:

Vol="/Users/alex/Downloads/file.txt"

options=($(tail -n+1 $Vol | awk '{print $1}' | sort | uniq) All Quit)

for (( i = 0; i < ${#options[@]}; i++ )); do
    echo "$i - ${options[i]}"
done

echo -e "Enter number corresponding to the Volume snapshot you want to restore: \n"
read vol

}

Следующий вывод - это то, что я получаю с помощью приведенного выше кода:

OPTIONS MENU
0 - Vol12
1 - Vol0
2 - Vol2
3 - Vol21
4 - All
5 - Quit
Enter number corresponding to the Volume snapshot you want to restore: 

Как я могу получить вывод, который будет отображаться как следующий, и сможет выбрать 12 или 0?

12 - Vol12
0  - Vol0
2  - Vol2
21 - Vol21

Пожалуйста, помогите

1 Ответ

2 голосов
/ 30 апреля 2020

Вы можете использовать ассоциативные массивы:

#!/bin/bash
Vol="/Users/alex/Downloads/file.txt"
declare -a arr

#Loop reads each line of the file
while IFS= read -r line; do
    n=${line##*[!0-9]}       #Gets the number at the end of this line
    arr[$n]=$line            #Uses it as the key to the array, the content being the whole line
    echo "$n - $line"
done < "$Vol"

read -p "Select one from above. " vol
echo "You selected ${arr[vol]}."

Например (я сохранил как sh.sh):

$ ./sh.sh
12 - Vol12
0 - Vol0
2 - Vol2
21 - Vol21
Select one from above. 2
You selected Vol2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...