Resultado inesperado ao usar argumentos de linha de comando para procurar um arquivo com o símbolo

2

Estou tentando escrever um script que aceite 2 argumentos de linha de comando, por exemplo. um nome de diretório, o outro, um símbolo (qualquer símbolo pode ser $, £, ^, * e assim por diante). Deve então verificar se o diretório tem um nome de arquivo que tenha esse símbolo e se não adiciona o símbolo ao diretório.

Então, se eu olhasse para um diretório chamado testDir como primeiro argumento e tivesse um * como o segundo argumento, ele verificaria os arquivos naquele diretório para ver se havia esse símbolo em um arquivo e se não havia. t o diretório agora seria chamado de testDir* .

Aqui está um código que estou tentando desenvolver.

a1=$1  
  symbol=$(ls $a1 | grep $2)

   if [ "$symbol" != "" ]
     then
     echo "file has Symbol"

   else
     echo "The symbol was added to directory"
     mv $a1 $1$2
    fi

Pareceu funcionar bem com o símbolo @ , então acredito que ele tenha sido afetado pelos caracteres especiais. Existe alguma maneira de tentar escapar caracteres especiais, mas também trabalhar com caracteres não especiais?

    
por James 11.10.2014 / 12:24

1 resposta

1

Em primeiro lugar, é uma boa ideia analisar a saída de ls ao procurar nomes de arquivos. Isso vai quebrar em qualquer caractere estranho, incluindo um espaço simples. A melhor maneira de contornar isso é usar globalização de concha ou find .

Sua próxima edição é que você não está citando as variáveis, o que significa que os caracteres especiais são expandidos antes que o comando mv seja executado. Um exemplo prático do seu script seria:

#!/usr/bin/env bash

if find "$1" -print0 | grep -z "$2" >/dev/null
then
    echo "file has Symbol" 
else
    echo  "The symbol was added to directory" 
    echo mv "$1" "$1$2" 
fi

AVISO : não tenho ideia de por que você gostaria de fazer isso. Seria. por exemplo, tente mover um diretório para um subdiretório dele mesmo e isso falhará. Eu suspeito de um problema XY aqui e sugiro que você edite sua pergunta para explicar o que você está realmente tentando fazer.

    
por 11.10.2014 / 15:00