2016-05-04 9 views
1

バックアップまたはリストアに関するbashで書いているスクリプトに問題があります。私がしようとしているのは、パラメータをチェックし、何も表示されていない場合は、名前が提供されるか、終了するまでループします。私はパラメータとループを終了するためにチェックすることができますが、私は持っている問題は、ユーザーの入力を取得し、バックアップファイル名のためにそれを使用しています。ここまでのスクリプトは、誰かがファイル名/ qをループする方法と、残りのスクリプトを扱うためにファイル名の入力を得る方法についてアドバイスできますか?キーボードを使用してファイル名を使用するかどうかを尋ねるループ、またはbashで終了する場合はqを返します。

#!/bin/bash 
# Purpose - Backup world directory 
# Author - Angus 
# Version - 1.0 

FILENAME=$1.tar.gz 
SRCDIR=World 
DESDIR=backupfolder 

if [ $# -eq 0 ] 
    then 
    echo "No filename detected. To use this utility a filename is 
required. Usage:tarscript filename" 
    else 
    echo "The filename to be used will be $filename" 
fi 


while [ $# -eq 0 ] 
do 
    echo "Please provide a filename or press q to exit." 
    read response 
    if [ $response == 'q' ] 
    then 
     exit 
    else [ $response == '$FILENAME' ] 
    echo -n 'Would you like to backup or restore? (B/R)' 
    read response 
     if [ $response == 'B' ] 
     then 
      tar cvpzf $DESDIR/$FILENAME $SRCDIR 
      echo 'Backup completed' 
      exit 
     fi 
    fi 
done 
+0

'test'(' [')の文字列等価演算子は' == 'ではなく' = 'であることに注意してください。 Bashはユーザーの無知のためにそれを受け入れますが、他のシェルは不平を言うでしょう。 – Jens

+0

チップをありがとう。 – Angus

+0

ファイル名が提供されるとどうなりますか? '$'がゼロよりも大きいので、 'if'はスキップされ、' while'もスキップされます。 – Jens

答えて

1

私は最終的にはそれが動作するように最終的に管理しました。 Jensのおかげで私の間違いが分かり、入力と供給されたパラメータに対応できるように変更されました。もちろん、このコードはすべての変更でほぼ2倍の大きさですが、ちょっとしたことがあります。

関連する問題