Tentando executar cada linha se uma quantidade definida de vírgulas estiver presente e incorrendo em erro.

0

Eu tenho um script que recebe uma entrada e atribui uma inserção à entrada nos comandos a serem executados. A primeira versão funciona perfeitamente, pois armazena seus resultados em um arquivo txt, verifica as linhas do arquivo txt em busca de valores específicos e armazena e atribui os valores aos comandos a serem executados.

Primeira e versão de trabalho sem executar com base na contagem de vírgulas:

#! /bin/bash
mapfile -t myArray < output.txt
count=${#myArray[@]}
echo "Count is $count"
echo "Enter servername "
read servername
for (( i=1; i<$count; ))
#for i in 'seq 1 $count'
do
        str="${myArray[$i]}"
        echo "str is $str"
        echo $i
        IFS=',' read -r -a array <<< "$str"
        i=$((i+2))
        username="${array[0]}"
        groupname="${array[1]}"
        echo $i
        echo "test $servername"
        echo "Username is $username"
        if [[ -z "${array[0]}" ]] || [[ "${array[0]}" == *'*'* ]]
        then
                echo "group"
                sudo docentcmd $servername centclicmd adquery group $groupname
        else
                echo "User"
                sudo docentcmd $servername centclicmd adquery user $username
        fi
done 

Agora é aí que o erro está chegando. Eu ainda estou ansioso para percorrer as linhas do arquivo txt para valores particulares, mas eu só quero obter os valores particulares se a linha tiver 7 vírgulas nele. Então, a menos que a linha no arquivo txt tenha 7 vírgulas, a linha deve ser ignorada.

Versão não funcional:

#! /bin/bash

echo "Enter server name:  "
read servername
sudo showsudolocal $servername | tr -d '$' | sed -e '/^$/d' | tee output.txt
sed -i 1,8d output.txt

mapfile -t myArray < output.txt
count=${#myArray[@]}


for (( i=1; i<$count; i++ ))
#for i in 'seq 1 $count'
do

         str="${myArray[$i]}"
         echo "str is $str"
         if [[ $str | grep -0 "," | wc -l -eq 7 ]]; then
                  IFS=',' read -r -a array <<< "$str"

                  username="${array[0]}"
                  groupname="${array[1]}"


                 echo "Username is $username"
                 if [[ -z "${array[0]}" ]] || [[ "${array[0]}" == *'*'* ]]
                 then
                        echo "group"
                        sudo docentcmd $servername centclicmd adquery group $groupname
                        cat /etc/group | grep $groupname
                else
                        echo "User"
                        sudo docentcmd $servername centclicmd adquery user $username
                        cat /etc/passwd | grep $username
                fi
        else
                echo "Invalid Line"

        fi
done
    
por BB956 16.07.2018 / 19:52

0 respostas