ssh com problema de loop-parênteses

0

Eu tenho o seguinte script:

while [ "$1" != "" ]
do
case "$1" in
    -h) HOST="$2"; shift 2;;
esac
done

if test -z "$HOST"
then
    [...]
else
    TODAY=$(date +'%Y-%m-%d') 
    configs=("/etc/inittab" "/etc/default/cron" "/etc/default/login" "/etc/default/su" "/etc/group" "/etc/inet/inetd.conf" "/etc/mnttab" "/etc/netmasks" "/etc/nsswitch.conf" "/etc/protocols" "/etc/services" "/etc/syslog.conf" "/var/sadm/install/contents" "/etc/user_attr" "/etc/passwd")  
    ssh $HOST 
    for (i=0; i<${#configs[*]}; i++) 
    do 
        digest -v -a md5 ${configs[$i]} | awk '{print $2,$4}' | sed 's/) (/\n/;s/[()]//g'; 
    done > /tmp/md5_config_$TODAY.txt
fi

Se eu executar o script com um nome de host (scriptname.sh -h hostname) recebo o erro

line 97: syntax error near unexpected token '('
line 97: 'for (i=0;i<${#configs[*]};i++;); '

Existe uma maneira de resolver isso? Eu quero executar o comando "digest" no host remoto com os nomes de arquivos da matriz "configs"

Editar: estado real

else
    TODAY=$(date +'%Y-%m-%d') 
    configs=("/etc/inittab" "/etc/default/cron" "/etc/default/login" "/etc/default/su" "/etc/group" "/etc/inet/inetd.conf" "/etc/mnttab" "/etc/netmasks" "/etc/nsswitch.conf" "/etc/protocols" "/etc/services" "/etc/syslog.conf" "/var/sadm/install/contents" "/etc/user_attr" "/etc/passwd")  
    ssh $HOST 
    for ((i=0; i<${#configs[*]}; i++)) 
    do 
        digest -v -a md5 ${configs[$i]} | awk '{print $2,$4}' | sed 's/) (/\n/;s/[()]//g'; 
    done > /tmp/md5_config_$TODAY.txt
fi
    
por DanielH 25.03.2014 / 11:22

1 resposta

1

Se eu fosse escrever algo assim, eu

TODAY='date --iso'
CONFIGS="/etc/inittab /etc/default/cron /etc/default/login ..."

ssh -q $HOST 'for cfg in '${CONFIGS}'; do digest -v -a md5 ${cfg}; done' |\
    awk '{print $2,$4}' | sed 's/) (/\n/;s/[()]//g' >> /tmp/md5_config_$TODAY.txt

No entanto, talvez você queira conferir o Tripwire e outras ferramentas criadas para esses fins.

    
por 25.03.2014 / 14:02