2012-01-19 35 views
0

私はbashコマンドについて少し勉強しようとしています。 残念ながら、最後の行に構文エラーが発生しました。私は何が間違っていたのか分かりませんし、この問題に関するフィードバックを感謝します。Ubuntu bash - 予期しないファイルの終了エラー

コード:

#!/bin/sh 

if [ -f $"/archive/backup-20110111.tar.gz" ]; then 
    echo "File already exists" 
else 
    sudo cp /home/plepple/Documents/backup/backup-20110111.tar.gz 
      /home/plepple/Documents/backup/archive/backup-20110111.tar.gz 
    rm /home/plepple/Documents/backup/backup-20110111.tar.gz 
fi 

if [ -f $"/archive/backup-20110112.tar.gz" ]; then 
    echo "File already exists" 
else 
    sudo cp /home/plepple/Documents/backup/backup-20110112.tar.gz 
      /home/plepple/Documents/backup/archive/backup-20110112.tar.gz 
    rm /home/plepple/Documents/backup/backup-20110112.tar.gz 
fi 

curdate='date +%Y%m%d' 
mv /home/plepple/Documents/backup/backup.tar.gz 
    /home/plepple/Documents/backup/backup-$curdate.tar.gz 

私は(bashの経由)、それを実行しようとしました:

bash backupscript.sh 

すべてのファイルとディレクトリが存在します。

ありがとうございます!

答えて

3
mv /home/plepple/Documents/backup/backup.tar.gz 
    /home/plepple/Documents/backup/backup-$datum.tar.gz 

ifブロックを終了するfi sがある場合と同じで

sudo cp /home/plepple/Documents/backup/backup-20110111.tar.gz \ 
      /home/plepple/Documents/backup/archive/backup-20110111.tar.gz 

sudo cp /home/plepple/Documents/backup/backup-20110112.tar.gz \ 
      /home/plepple/Documents/backup/archive/backup-20110112.tar.gz 
+0

スクリプト全体に改行エスケープがありません。これは単なる貼り付けの問題です: –

+0

これは問題だと思われます。ちょうどbashでチェックしました –

+0

これはうまくいったようですが、別のエラーが表示されます: "ターゲット '%Y%m%d'はディレクトリではありません。 "何か案は? –

1

のために行く

mv /home/plepple/Documents/backup/backup.tar.gz \ 
    /home/plepple/Documents/backup/backup-$datum.tar.gz 

すべきですか?

+0

ねえ!私はコードを編集しました。本当に残念です。私は、 "if"の後ではなく、 "else"の後に "fi"する必要があると仮定します。 :) –

1

これは問題ではなく、ちょっとしたbash構文の修正です:bashでは、構造体$"somestring"がローカライズを呼び出します。

A double-quoted string preceded by a dollar sign ($) will cause the 
string to be translated according to the current locale. If the cur- 
rent locale is C or POSIX, the dollar sign is ignored. If the string 
is translated and replaced, the replacement is double-quoted. 

あなたifテストでファイルパスに関連すると表示されませんので、あなたはおそらく$オフのままにする必要があります。bashのmanページから。実際には、ファイルパスには面白い文字が含まれていないので、二重引用符の過度使用は不当利用よりはるかに優れていますが、それらの周りに引用符は必要ありません。

関連する問題