2016-04-15 4 views
0

мой сценарий принимает имя сайта от пользователя.Bash предлагает numberd результаты для выбора пользователем

./run_script <site> 

./run_script cambridge 

Его затем позволяет пользователю проверять, редактировать и фиксировать изменения в файле через скрипт.

Однако некоторые сайты имеют от двух до шести файлов.

Так скрипт перечисляет их следующим образом

У вас есть более чем один кембриджский файл.

Пожалуйста, выберите одну из следующих функций:

cambridge1

cambridge2

cambridge3

пользователь вводит слово кембридж [1-3]

Однако я 'd хотел бы присвоить значение каждой переменной, т. е. следующим образом.

Пожалуйста, выберите нужный вариант:

1). cambridge1

2). cambridge2

3). cambridge3

пользователь вводит 1, 2 или 3, и он подбирает файл.

Текущий код у меня есть:

echo $(tput setaf 5) 
echo "Please choose from the following: " 
echo -n $(tput sgr0) 

find path/to/file/. -name *"$site"* | awk -F "/" '{print $5}' | awk -F "SITE." '{print $2}' 

echo $(tput setaf 3) 

read -r input_variable 
echo "You entered: $input_variable" 
echo $(tput sgr0) 
+4

Похоже, работа для 'select'. См. Раздел [условные конструкции в Справочном руководстве Bash] (https://www.gnu.org/software/bash/manual/bashref.html#index-commands_002c-conditional). 'select' является третьей конструкцией после' if' и 'case'. – kojiro

+0

Хммммм .. Спасибо, я попробую это, и посмотрю, может ли он получить разные суммы. -Ben –

ответ

1

Вот интересный способ:

# save the paths and names of the options for later 
paths=`find path/to/file/. -name "*$site*"` 
names=`echo "$paths" | awk -F "/" '{print $5}' | awk -F "SITE." '{print $2}'` 
# number the choices 
n=`echo "$names" | wc -l` 
[ "$n" -gt 0 ] || echo "no matches" && exit 1 
choices=`paste <(seq 1 $n) <(echo "$names") | sed 's/\t/). /'` 

echo "Please choose from the following: " 
echo "$choices" 
read -r iv 
echo "You entered: $iv" 
# make sure they entered a valid choice 
if [ ! "$iv" -gt 0 ] || [ ! "$iv" -le "$n" ]; then 
    echo "invalid choice" 
    exit 1 
fi 

# name and path of the user's choice: 
name_chosen=`echo "$names" | tail -n+$iv | head -n1` 
path_chosen`echo "$paths" | tail -n+$iv | head -n1` 
+1

Спасибо, что Webb отлично работает. –