Problemas shell script [RESOLVIDO]

1. Problemas shell script [RESOLVIDO]

Raphael Fernandes Alves Silva
raphaels

(usa Ubuntu)

Enviado em 09/10/2012 - 11:43h

Olá eu trabalho numa software House daqui de londrina-PR e preciso fazer um script para um cliente para renomeação de arquivos gz para um padrão estipulado por eles,o script em si esta funcionando mais foi pedido para fazer um verificação caso arquivo .gz já exista perguntar se quer substituir ou não o arquivo,mais está dando erro quanto entra no if da resposta da pergunta e tirando esse if deixando só pergunta e o read resp ele ignora nem aparece a pergunta para mim,na execução do script.
como resolver isso?

#!/bin/bash
DIA=`date +%d`
MES=`date +%m`
CONT=1
ls *.gz | while read ARQ
do
if (($CONT <= 9))
then
if [ -e antigos/0$CONT$DIA$MES.gz ]
then
echo -n "Esse arquivo já existe deseja substituir?"
read RESP
if [ $RESP = "sim" ]
then
mv "$ARQ" "antigos/0$CONT$DIA$MES.gz"
CONT=`expr $CONT + 1`
else
echo "O arquivo não foi substituído"
fi
else
mv "$ARQ" "antigos/0$CONT$DIA$MES.gz"
CONT=`expr $CONT + 1`
fi
else
if [ -e antigos/$CONT$DIA$MES.gz ]
then
echo -n "Esse arquivo já existe deseja substituir?"
read RESP
if [ $RESP = "sim" ]
then
mv "$ARQ" "antigos/$CONT$DIA$MES.gz"
CONT=`expr $CONT + 1`
else
echo "O arquivo não foi substituído"
fi
else
mv "$ARQ" "antigos/$CONT$DIA$MES.gz"
CONT=`expr $CONT + 1`
fi
fi
done

segue o erro da execução do script.

raphael@inf-001:~/teste bassani$ ./scriptbassani.sh
Esse arquivo já existe deseja substituir?./scriptbassani.sh: linha 14: [: número excessivo de argumentos
O arquivo não foi substituído
Esse arquivo já existe deseja substituir?O arquivo não foi substituído
Esse arquivo já existe deseja substituir?./scriptbassani.sh: linha 14: [: número excessivo de argumentos
O arquivo não foi substituído
Esse arquivo já existe deseja substituir?./scriptbassani.sh: linha 14: [: número excessivo de argumentos
O arquivo não foi substituído
Esse arquivo já existe deseja substituir?./scriptbassani.sh: linha 14: [: número excessivo de argumentos
O arquivo não foi substituído
Esse arquivo já existe deseja substituir?O arquivo não foi substituído
Esse arquivo já existe deseja substituir?O arquivo não foi substituído
Esse arquivo já existe deseja substituir?./scriptbassani.sh: linha 14: [: =: esperado operador unário
O arquivo não foi substituído
raphael@inf-001:~/teste bassani$

Obrigado

Raphael Silva



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/10/2012 - 17:52h

Além do erro na linha que diz "if (($CONT <= 9))", o problema com o seu script é causado pelo "| while read ARQ". Esse pipe redireciona a entrada para todo o bloco do while, não apenas para o primeiro read.

A forma de resolver, usando o bash, é fazer algo como o que segue (de um script hipotético [*****], só para mostrar o recurso).

#!/bin/bash -

# Cria um arquivo temporario (talvez em /dev/fd/) com a saida de ls
# e redireciona para o file descriptor 3, de leitura para o shell.
exec 3< <(ls)

# Note que o redirecionamento abaixo e so para o comando read, nao para o while.
while read arq <&3; do
echo -n "Confirma que quer exluir o arquivo \"$arq\" (s/n): "
read conf
if [[ "$conf" = s || "$conf" = S ]]; then
rm -f "$arq"
elif [[ "$conf" != n && "$conf" != N ]]; then
echo "Resposta invalida. Assumindo que voce nao quer apagar o arquivo."
fi
done

# Fecha o file descriptor 3.
exec 3<&-


3. Problemas shell script

Éder
guedeseder

(usa Ubuntu)

Enviado em 09/10/2012 - 17:04h

Cara eu tentei rodar o script aqui mas não consegui.

Com as modificações que fiz (ver código) foi possível rodar.
Quem sabe é isso.

#!/bin/bash
DIA=$(date +%d)
MES=$(date +%m)
CONT=1

ls *.gz | while read ARQ
do

if [ $CONT <= 9 ]; then
if [ -e antigos/0$CONT$DIA$MES.gz ]; then
echo -n "Esse arquivo já existe deseja substituir?"
read RESP
if [ $RESP = "sim" ]; then
mv "$ARQ" "antigos/0$CONT$DIA$MES.gz"
CONT="expr $CONT + 1";
else
echo "O arquivo não foi substituído"
fi
else
mv "$ARQ" "antigos/0$CONT$DIA$MES.gz"
CONT=`expr $CONT + 1`
fi
else
if [ -e antigos/$CONT$DIA$MES.gz ]; then
echo -n "Esse arquivo já existe deseja substituir?"
read RESP
if [ $RESP = "sim" ]; then
mv "$ARQ" "antigos/$CONT$DIA$MES.gz"
CONT="expr $CONT + 1"
else
echo "O arquivo não foi substituído"
fi
else
mv "$ARQ" "antigos/$CONT$DIA$MES.gz"
CONT=`expr $CONT + 1`
fi
fi
done

Qualquer coisa estamos aí!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts