Diretório de backup de script de shell UNIX no dia específico

0

Basicamente, esta é a pergunta que estou tentando responder

2) Escreva um script de shell (fridaybackup.sh) que, se executado na sexta-feira, faça o backup de todos os arquivos no diretório inicial user2. O script criará um arquivo de backup (tar) chamado user2backup.tar e o arquivo zip chamado user2backup.zip

Isto é o que eu tenho até agora

    #!/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

Mas eu recebo esse resultado

    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

Qualquer ajuda seria ótima e obrigado antecipadamente

    
por Taylor Cairns 02.10.2017 / 12:58

3 respostas

1

parece haver um problema de copiar / colar,

A variável

deve ser definida usando

day=$(date +%A)

Eu acredito que você usa backtick, que desaparece sob formatação, como mostra o erro "segunda-feira".

há um erro de sintaxe perto de if

error Monday: not found

prove que a configuração estava correta, como na linha 14 encontro de bash:

( Monday = friday )

isso bifurcou um sub shell, executando Monday como nome do programa e = Friday como argumento. Isto não é o que você pretende.

No teste de shell são feitos usando

if [ "$day" = "Friday" ]

ou

if test "$day" = "Friday"

assim, a aparência correta do shell é:

#!/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
    
por 02.10.2017 / 13:13
0

Tente usar read -p "Do you want to create a full backup (Y=Yes, N=No) : " INPUT em vez de seu:

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

EDIT: Também como @Raman no comentário explicado, você cometeu erro ao declarar suas variáveis.

Esta seria a melhor e mais segura maneira de declarar sua variável filename :

filename="user2backup${time}.tar.gz"
    
por 02.10.2017 / 13:08
0

A descrição não requer perguntar ao usuário. Pode fazer isso automaticamente:

 #!/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
    
por 02.10.2017 / 15:02