2013-09-29 2 views
0

Итак, я пишу простой сценарий резервного копирования, который при вызове будет либо создавать резервные копии определенного файла, либо всех файлов в моем текущем каталоге в моем каталоге резервных копий. Это мой сценарийошибка сценария резервного копирования bash

#!/bin/bash 

#verify if $1 is empty, if so, copy all content to backup directory 

if [ -z "$1" ] 
then 

    $files=ls 
    #Looping through files 
    for file in $files 
    do 
     cp $file ../backup/ 
    done  
#else copy files specified 

else 

$files=ls $1 

    #Looping through files 
    for file in $files 
    do 
     cp $file ../backup/ 
    done 
fi 

и единственная ошибка, я получаю:

./backup: строка 7: = лс команда не найдена

Я не знаю, почему сценарий не распознает ls как команду. Есть идеи?

ответ

0

Вы должны попробовать положить ls в знаки, лучше, обратную цитату. Например:

files=`ls` 

Здесь немного фона. Проверьте страницу this для получения дополнительной информации о кавычках в среде оболочки:

Обратная цитата не используется для цитирования символов. Этот символ используется для подстановки команд, где символы между ними: , выполняемые оболочкой, и результаты вставляются в эту строку.

Пример:

echo the date is `date` 
3

присвоить переменный, вам не нужен знак доллара:

files=foo 

, чтобы сохранить вывод команды в вар, что вам нужно сделать :

files=$(ls) 

или

files=$(ls /path/to/some/dir) 
0

Я вижу две ошибки:

  1. При инициализации переменных «файлы» вы не должны предварять его с символом «$»
  2. Команда Ls должен быть помещен в обратные кавычки (`):

Это короткий пример:

#!/bin/bash 

files=`ls` 

for file in $files 
do 
    echo "file: $file" 
done 
Смежные вопросы