Bash为用户选择提供了数字结果

时间:2016-04-15 13:17:54

标签: linux bash shell sysadmin

我的脚本接收用户的站点名称。

./run_script <site>

./run_script cambridge

然后,它允许用户通过脚本签出,编辑和提交对文件的更改。

但是,有些网站有两到六个文件。

因此脚本将它们列为如下

您有多个剑桥文件。

  

请从以下内容中选择:

     

cambridge1

     

cambridge2

     

cambridge3

用户输入单词cambridge [1-3]

但是,我想为每个变量分配一个值,即如下所示。

  

请选择您想要的选项:

     

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)

1 个答案:

答案 0 :(得分: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`