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(申し訳ありませんが、私は英語を母国語として使用しません)、この部分を即座に作成しました。しかし、正確に何が欲しいのかについての追加情報を提供してください。助けてください。

おすすめ記事