特定の日付のUNIXシェルスクリプトのバックアップディレクトリ

特定の日付のUNIXシェルスクリプトのバックアップディレクトリ

基本的にこれは私が答えたい質問です。

2)金曜日に実行すると、user2のホームディレクトリにあるすべてのファイルをバックアップするシェルスクリプト(fridaybackup.sh)を作成します。このスクリプトは、user2backup.tarというバックアップ(tar)ファイルとuser2backup.zipというzipファイルを生成します。

これが私が今まで持っているものです

    #!/bin/sh
    echo
    echo "Do you want to create a full backup (Y=Yes, N=No) : \c"
    read INPUT

    day=$(date +%A)
    time=$(date +%m-%d-%y)
    filename=user2backup${time}.tar.gz
    srcdir='/export/home/student/user2'
    desdir='/export/home/student/backupfolder'

   case $INPUT in
   N) echo "Bye." ;;
   Y)
   if [ "$day" = "Monday" ]
   then 
   tar -cpzf $desdir/$filename $srcdir

    else
    echo "A full backup is done on Fridays only!!!"

     fi ;;
    *) echo "Error" ;;
  esac

しかし、この結果が出てきます。

    student@solaris:~/user2$ sh fridaybackup.sh

    Do you want to create a full backup (Y=Yes, N=No) : Y
    tar: /export/home/student/backupfolder/user2backup10-02-17.tar.gz: No 
     such file or directory
    student@solaris:~/user2$ gedit fridaybackup.sh

どんな助けでもいいでしょう。よろしくお願いします。

答え1

コピー/貼り付けに問題があるようです。

変数は次のように設定する必要があります。

day=$(date +%A)

私はあなたがバックティックを使用していると思い、「月曜日」エラーに示されているように書式を設定すると消えます。

近くに文法エラーがあります。if

月曜日のエラー:見つかりません

Bash発生の14行目に示すように、設定が正しいことを証明してください。

( Monday = friday )

これはサブシェルをフォークし、Mondayプログラム名と= Friday引数で実行されます。あなたが望むものではありませんか?

シェルテストで完成を使用

if [ "$day" = "Friday" ]

または

if test "$day" = "Friday"

したがって、正しいシェルは次のようになります。

#!/bin/sh
 echo
 echo "Do you want to create a full backup (Y=Yes, N=No) : \c"
 read INPUT

 day=$(date +%A)
 time=$(date +%m-%d-%y)
 filename=user2backup$time.tar.gz
 srcdir='/export/home/student/user2'
 desdir='/export/home/student/backupfolder'

 case $INPUT in
 N) echo "Bye." ;;
 Y)
 if [ "$day" = "Friday" ]
 then 
 tar -cpzf $desdir/$filename $srcdir

 else
 echo "A full backup is done on Fridays only!!!"

 fi ;;
 *) echo "Error" ;;
 esac

答え2

read -p "Do you want to create a full backup (Y=Yes, N=No) : " INPUTあなたの代わりに試してみてください:

echo "Do you want to create a full backup (Y=Yes, N=No) : \c"
read INPUT

編集:@Ramanが説明したように、変数宣言に間違いがありました。

filenameこれは変数を宣言するための最良かつ安全な方法です。

filename="user2backup${time}.tar.gz"

答え3

この説明はユーザーに尋ねる必要はありません。自動的に実行できます。

 #!/bin/sh
 if [ $(date +%A) = Friday ]; then
    TARFILE=/export/home/student/backupfolder/user2backup$(date +%m-%d-%y).tar
    tar -cpf $TARFILE /export/home/student/user2
    zip $TARFILE.zip $TARFILE
 fi

関連情報