如何使用 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

我无法完全理解你关于mkdiring 不包括文件名的目录的问题(抱歉,我不是以英语为母语的人),所以我只是即兴创作了这部分,但如果你给我更多关于你到底想要什么的例子,也许我可以帮你。

相关内容