Есть ли способ использовать переменную и включить ее с изменяющейся переменной на всякий случай? - PullRequest
0 голосов
/ 06 августа 2020
function install(){

V1=version1
V2=version2
DIR=folder

echo "Select version by number to download ${reset}:"
echo "$V1"
echo "$V2"
read version

case $version in

  1) if [[ ! -d $DIR/$V1 ]]; 
        then echo "Creating $DIR/$V1 folder."
            mkdir -p $DIR
        else
            echo "$DIR/$V1 Folder exists"
     fi

  2) if [[ ! -d $DIR/$V2 ]]; 
        then echo "Creating $DIR/$V2 folder."
            mkdir -p $DIR/$V2
        else
            echo "$DIR/$V2 Folder exists"
      fi
}

opt=$1
case $opt in
    --install | -i) install ;;
    *) echo "Exit"
       exit ;;
esac

Теперь единственное, что изменяется в case $version, - это переменная $V[1-2]

Как я могу прочитать шаблон и вставить туда?

Я пробовал:

lines=('if [[ ! -d $DIR/$V0 ]]; 
        then echo "Creating $DIR/$V0 folder."
            mkdir -p $DIR
        else
            echo "$DIR/$V0 Folder exists"
     fi')

, а затем

1) $(lines | sed -e "s/\&V0/\$V1/g")

Но это не сработало. Любые идеи? Любая помощь приветствуется! Спасибо!

РЕДАКТИРОВАТЬ: Прошу прощения, но после прочтения ответов я сожалею, что не был достаточно ясен. Основная часть, о которой я прошу, была:

  1. У меня есть текст с условиями «if then else»
  2. Этот текст должен быть где-то в качестве шаблона.
  3. Затем этот шаблон должен быть прочитан и переменные должны быть заменены правильными.
  4. Таким образом, у меня есть только один сценарий, и его можно использовать повторно, просто поместив его в "case" с небольшой модификацией, например, через sed.

Это возможно?

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Используйте встроенную команду select для создания подсказки и меню доступных опций:

#!/usr/bin/env bash

declare -a versions=(version1 version2)
dir=folder

PS3="Select version by number to download: "
select version in "${versions[@]}"; do
    if [[ -z $version ]]; then
        echo "Invalid version!"
    elif [[ ! -d $dir/$version ]]; then
        echo "Creating $dir/$version folder"
        mkdir "$dir/$version"
        break
    else
        echo "$dir/$version already exists."
        break
    fi
done
0 голосов
/ 06 августа 2020

Назначьте $V1 или $V2 другой переменной и используйте это в общем коде

case $version in
    1) v=$V1 ;;
    2) v=$V2 ;;
    *) echo "Invalid version"; exit ;;
esac

if [[ ! -d "$DIR/$v" ]]; 
then 
    echo "Creating $DIR/$v folder."
    mkdir -p "$DIR/$v"
else
    echo "$DIR/$v Folder exists"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...