Como fazer perguntas com um script bash e torná-las uma variável?

1

Eu quero fazer um script bash que crie links simbólicos para mim em vez de fazer isso manualmente. Na minha opinião, o fluxo de trabalho seria algo assim:

Pergunta 1: Qual é o caminho do arquivo / pasta para ser a fonte? (entrada do usuário a fonte)

Pergunta 2: Qual é o caminho do destino? (destino de entrada do usuário)

E então eu pegaria essa entrada e a variável $SOURCE e $DESTINATION

Em seguida, basta executar algo como:

mkdir -p $DESTINATION 
ln -s "$SOURCE" "$DESTINATION"

O script deve esquecer as variáveis após cada execução e também executar em loop até que o usuário decida sair dele.

Além disso, se um usuário inserir um destino que termine com um nome de arquivo diferente, como é frequentemente desejado, como eu posso mkdir o diretório mas excluir o nome do arquivo?

Como /root/files/1 e desejo enviá-lo por symlink para /var/files/2 . Sendo "2" apenas um nome diferente para o arquivo "1". Como posso tornar meu script tão inteligente?

Desculpe se esta é uma pergunta estúpida, eu sou apenas novo neste mundo e este script será um dos mais complexos que já escrevi.

    
por Freedo 11.09.2017 / 07:24

1 resposta

2

Parece que você quer algo assim:

#!/usr/bin/env bash

while :; do

  read -r -p 'Source: ' source
  read -r -p 'Destination: ' destination

  [[ $destination != */* ]] || mkdir -p -- "${destination%/*}" &&
    ln -s -- "${source}" "${destination}"

  read -r -p 'Exit? (type "e" to exit): '
  [[ "${REPLY}" == 'e' ]] && break

done

Exemplo:

$ cd ~/Desktop
$ ls -l
total 0
$ touch file
$ ls -l
total 0
-rw-rw-r-- 1 a a 0 sep 11 03:13 file
$ my_script.sh
Source: ./file
Destination: ./dir/file_copy_1
Exit? (type "e" to exit): 
Source: ./file
Destination: ./dir/file_copy_2
Exit? (type "e" to exit): e
$ ls -l ./dir
total 2
lrwxrwxrwx 1 a a 6 sep 11 03:15 file_copy_1 -> ./file
lrwxrwxrwx 1 a a 6 sep 11 03:15 file_copy_2 -> ./file

Eu não conseguia entender completamente sua pergunta sobre mkdir ing o diretório excluindo o nome do arquivo (desculpe, eu não sou um falante nativo de inglês), então eu apenas improvisei essa parte, mas se você me der mais exemplos sobre o que você quer exatamente que eu possa te ajudar.

    
por 11.09.2017 / 10:24