bash 스크립트를 사용하여 어떻게 질문하고 변수로 만들 수 있나요?

bash 스크립트를 사용하여 어떻게 질문하고 변수로 만들 수 있나요?

수동으로 수행하는 대신 파일을 심볼릭 링크하는 bash 스크립트를 만들고 싶습니다. 작업 흐름은 다음과 같을 것 같습니다.

질문 1: 소스인 파일/폴더의 경로는 무엇입니까? (사용자 입력 소스)

질문 2: 목적지까지 가는 길은 무엇입니까? (사용자가 목적지를 입력합니다)

$SOURCE그런 다음 이 입력을 받아 변경 가능 하게 만듭니다.$DESTINATION

그런 다음 다음과 같이 실행합니다.

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

스크립트는 사용자가 종료하기로 결정할 때까지 각 실행 및 반복 후에 변수를 잊어야 합니다.

또한 사용자가 입력한 대상이 일반적으로 다른 파일 이름으로 끝나는 경우 어떻게 디렉터리를 mkdir하고 파일 이름을 제외할 수 있습니까?

/root/files/1내가 심볼릭 링크를 하고 싶은 것처럼 /var/files/2"2"는 파일 "1"의 다른 이름일 뿐입니다. 어떻게 하면 스크립트를 그렇게 스마트하게 만들 수 있나요?

어리석은 질문이라면 죄송합니다. 저는 이 세상에 처음 왔을 뿐이고 이 스크립트는 제가 작성한 스크립트 중 가장 복잡한 스크립트 중 하나가 될 것입니다.

답변1

다음과 같은 것을 원하는 것 같습니다.

#!/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

예:

$ 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

파일 이름 없이 디렉토리를 지정하는 것에 대한 귀하의 질문을 잘 이해할 수 없어서 mkdir(죄송합니다. 저는 영어를 모국어로 사용하지 않습니다.) 그래서 이 부분을 즉석에서 만들었습니다. 하지만 정확히 원하는 것이 무엇인지에 대한 추가 정보를 제공해 주시면 아마도 제가 할 수 있을 것입니다. 도와주세요.

관련 정보