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
Tags bash shell-script