Script de shell do Linux “Nenhum arquivo ou diretório”

2

Eu criei um script de shell para concluir 3 tarefas simples (zipar um diretório, renomear o arquivo final e excluir o diretório de origem). A fonte do script está abaixo:

#!/bin/bash
if [[ $2 == *"/data/"* ]]
then
    src= $2"/*";
    dest= $1".zip";

    # Just for test
    echo $src;

    # Commented for now
    #zip -r -j $dest $src
    #mv $dest $1
    #rm -rf $2
else
    echo "Invalid arguments";
fi

Quando executo o script acima com esses parâmetros que tenho com erro:

./scriptzip.sh /data/file-new /data/file-old

./scriptzip.sh: line 4: /data/file-old/*: No such file or directory
./scriptzip.sh: line 5: /data/file-new.zip: No such file or directory

Como pode impedir que o shell teste uma variável para string "directory like"? Existe alguma maneira de pular isso?

    
por h2odev 17.08.2016 / 15:53

1 resposta

7

O espaço é significativo no shell, pois é isso que divide os tokens em comandos como echo foo bar ou pior rm -rf /some/where / . Portanto, a atribuição não deve incluir espaços em torno do = :

foo=/etc/*
echo $foo

As variáveis também podem precisar de citação, dependendo exatamente do que você quer que aconteça, para expansão glob e também divisão de palavras (a divisão incorreta de palavras em rm pode resultar em limpezas inesperadas (e hilárias) do sistema de arquivos).

echo "$foo"
    
por 17.08.2016 / 16:33

Tags