awk em ssh in su em uma substituição de comando

2

Estou criando um script que irá ssh para um host e imprimirá todas as contas de usuário e quando elas expirarão.

Em um host, posso executar awk -F':' '{ print $1}' /etc/passwd e ele me fornecerá uma lista de todas as contas de usuário.

Eu adicionei isso a um script que deveria ir para um servidor, criar essa lista e usá-la para imprimir quando ela será expiada.

#!/bin/bash

for i in 'cat /admin/lists/testlist'
do
  echo $i
  UNAME='su - admin -c "ssh $i uname"'

  if test "$UNAME" = "Linux"
  then
    LIST='su - admin -c "ssh $i awk -F':' '{ print $1}' /etc/passwd"'
    for j in $LIST
    do
      echo "$j " ; 'su - batch -c "ssh $i sudo chage -l $j | grep Account"'
    done

  else
    echo "Exiting. The OS type is not found."
  fi

  echo "========================================================================"
  echo " "
done

exit 0

O problema que estou tendo é quando executo o script, recebo o seguinte erro.

[admin@testserver bin]$ sudo checkPasswdExpiration.sh
testserver02
awk: cmd. line:1: {
awk: cmd. line:1:  ^ unexpected newline or end of string
========================================================================

Por que o comando awk não funciona neste script?

    
por SpruceTips 05.01.2015 / 19:20

1 resposta

4

O primeiro conjunto de aspas é comido pela linha de comando para su , e o segundo conjunto pela linha de comando para ssh , de modo que a cotação { print $1} seja realmente vista como três argumentos separados por awk . Escape as aspas ( e $ e qualquer outro caractere especial que você possa usar):

su - admin -c "ssh $i awk -F: \'{ print \}\' /etc/passwd"

Ou:

su - admin -c "ssh $i getent passwd" | awk -F: '{print $1}'
    
por 05.01.2015 / 19:34