Script in shell su file di testo

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
JordanDunk
Prode Principiante
Messaggi: 55
Iscrizione: lunedì 24 aprile 2017, 15:48
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Script in shell su file di testo

Messaggio da JordanDunk »

Buongiorno a tutti, sto cercando di scrivere uno Script che: richiede l’inserimento del nome dell’utente che si vuole mo-
dificare. Dopo aver verificato che l’utente esista, lo script chiede di modificare: password, nome del gruppo di appartenenza, user info, home relativa all’utente
e shell da utilizzare: NON si chiede di modificare username e UID. Il nuovo gruppo di appartenenza dell’utente deve esistere, altrimenti lo scriptsegnala l’errore a video e non procede con la modifica.

il file con gli utenti è:
Aragon:ilritornodelre:12:1000:il legittimo re:/home/aragon:/bin/bash
Gimmly:777888999:66:800:bla bla:/home/gimmly:/bin/bash
Legolas:odioinani:99:42:biondo arco:/home/legolas:/bin/bash
Frodo:pass111:23:1000:il portatore:/home/frodo:/bin/bash
Gollum:19191919:200:67:il mio tessssoro:/home/Gollum:/bin/bash
Sauron:unanelloperdomarli:10:20:the boss of the montefato:/home/Sauron/:/bin/bash
Aragon 2:aragonpass:13:32:the secret account of Aragon:/home/private/aragonhide/:/bin/hidebash

il file con i gruppi è:
Moria Miniere:800
Admin:32
Aragon Team:320
Elfo lungo:42
Stregone:73
l'occhio:20
Compagnia:1000
mangio pesce:67
Urukai:13

Lo script che ho fatto è il seguente: (all'inizio ho messo i commenti dei punti dello script che non mi vanno)
#!/bin/bash

#Problemi riscontrati:
# 1) Se metto un nome utente non valido il programma continua e mi dice utente trovato.es:
#Inserisci utente da modificare:
#Leo
#Ricerca dell utente da modificare...
#Riga utente trovata:
#Utente trovato.
#Inserisci nuovo password:

#2) nel mio file passwd ho gli utenti Aragon e Aragon 2, il programma me li cerca entrambi e invece dovrebbe estrarne solo uno. es:
#Inserisci utente da modificare:
#Aragon
#Ricerca dell utente da modificare...
#Aragon
#Aragon 2
#Riga utente trovata: Aragon:ilritornodelre:12:1000:il legittimo re:/home/aragon:/bin/bash
#Aragon 2:aragonpass:13:32:the secret account of Aragon:/home/private/aragonhide/:/bin/hidebash
#Utente trovato.
#Inserisci nuovo password:

#3) Quando inserisco il campo del commento e scrivo una frase (oppure inserisco Aragon 2 nella ricerca dell'utente), lo script mi dice che si aspetterebbe solo un parametro. es1:
#Inserisci utente da modificare:
#Aragon 2
#provaawk.sh: riga 73: [: Aragon: atteso operatore unario
#Ricerca dell utente da modificare...

#es2:
#Inserisci nuovo password:
#0000
#Inserisci nuovo gruppo di appartenenza:
#800
#Inserisci nuova USER INFO:
#verme mollo
#provaawk.sh: riga 95: [: verme: atteso operatore unario

#4)Sembra che mi dia dei problemi quando nel campo del commento del mio file originale ho due o piu parole.Oppure i valori $1(riga utente), $2(nuova riga utente) e $3(file passwd) nella funzione modifica_linea non sono letti correttamente
#S es:
#Inserisci utente da modificare:
#Gimmly
#Ricerca dell utente da modificare...
#Gimmly
#Riga utente trovata: Gimmly:777888999:66:800:bla bla:/home/gimmly:/bin/bash
#Utente trovato.
#Inserisci nuovo password:
#0000
#Inserisci nuovo gruppo di appartenenza:
#1000
#Inserisci nuova USER INFO:
#Prova
#Inserisci nuova HOME utente:
#/newGimmly
#ciao 1000
#1000
#1000
#Gruppo trovato.
#Modifica dei campi richiesti
#nuova riga Gimmly:0000:66:1000:Prova:/newJabba:/bin/bash
#Il file Gimmly:0000:66:1000:Prova:/newGimmly:/bin/bash non esiste! Non è stato possibile sostituire Gimmly:777888999:66:800:bla con bla:/home/gimmly:/bin/bash





Codice: Seleziona tutto

POS_UTENTE=1
POS_PSW=2
POS_UID=3
POS_GROUP_ID=4
POS_UID_INFO=5
POS_HOME=6
POS_CMD=7

#FILE DA UTILIZZARE simile a /etc/passwd
FILE_PASSWD=passwd2.txt

#UTENTE_TROVATO

function modifica_linea {
 if [ -f $3  ]; then
   echo "File:$3 - Sostituzione: $1 -> $2 "
   sed -i -- "s|$1|$2|g" $3
 else
   echo "Il file $3 non esiste! Non è stato possibile sostituire $1 con $2"
 fi
}

function cerca_utente {
  cat $FILE_PASSWD | awk -F ":" {'print  $'$POS_UTENTE''} | grep -w "$1"
  RIGA_UTENTE=$(grep "$1:" $FILE_PASSWD)
  echo "Riga utente trovata: $RIGA_UTENTE"
  return $?
}

function cerca_gruppo  {
  echo "ciao $1"
  GRUPPO_UTENTE=$(cat $FILE_PASSWD | awk -F ":" {'print $'$POS_GROUP_ID''} | grep -w "$1" | head -n1)
  echo $GRUPPO_UTENTE 
  if [ $GRUPPO_UTENTE ]; then
    echo $GRUPPO_UTENTE 
    return 0;
  else
    return 1;
  fi
}

echo "Inserisci utente da modificare:"
#lettura utente
read UTENTE
if [ ! $UTENTE ];then echo "Non puoi lasciare vuoto questo campo"; exit 1;fi

#ricerca utente
echo "Ricerca dell utente da modificare..."
cerca_utente $UTENTE
RISULTATO=$?
#risultato ricerca
if [ $RISULTATO -eq 0 ]; then
  echo "Utente trovato."
else
   echo "Utente non trovato"
   exit 1;
fi

echo "Inserisci nuovo password:"
read PASSWORD
if [ ! $PASSWORD ];then echo "Non puoi lasciare vuoto questo campo"; exit 1;fi
echo "Inserisci nuovo gruppo di appartenenza:"
read GRUPPO
if [ ! $GRUPPO ];then echo "Non puoi lasciare vuoto questo campo"; exit 1;fi
echo "Inserisci nuova USER INFO:"
read UID_INFO 
if [ ! $UID_INFO ];then echo "Non puoi lasciare vuoto questo campo"; exit 1;fi
echo "Inserisci nuova HOME utente:"
read HOME
if [ ! $HOME ];then echo "Non puoi lasciare vuoto questo campo"; exit 1;fi

cerca_gruppo $GRUPPO
RISULTATO=$?
#risultato ricerca
if [ $RISULTATO -eq 0 ]; then
  echo "Gruppo trovato."
  echo "Modifica dei campi richiesti"
  MUID=$(echo $RIGA_UTENTE | awk -F ":" {'print  $'$POS_UID''})
  CMD=$(echo $RIGA_UTENTE | awk -F ":" {'print  $'$POS_CMD''})

  echo "nuova riga $UTENTE:$PASSWORD:$MUID:$GRUPPO:$UID_INFO:$HOME:$CMD"

  modifica_linea $RIGA_UTENTE "$UTENTE:$PASSWORD:$MUID:$GRUPPO:$UID_INFO:$HOME:$CMD" $FILE_PASSWD
else
   echo "Gruppo non trovato, non sarà effettuata nessuna modifica"
   exit 1;
fi
Voi sapreste aiutarmi?
Ultima modifica di JordanDunk il martedì 23 maggio 2017, 12:05, modificato 1 volta in totale.
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40301
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: Script in shell su file di testo

Messaggio da steff »

Dovresti sapere che va usato sempre il tag codice per script e comandi, altrimenti la discussione risulta quasi illeggibile con quel scroll chilometrico senza distinzione, modifica per favore tuo messaggio grazie.
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
JordanDunk
Prode Principiante
Messaggi: 55
Iscrizione: lunedì 24 aprile 2017, 15:48
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Re: Script in shell su file di testo

Messaggio da JordanDunk »

Fatto :) scusa mi ero dimenticato.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: maidasette e 11 ospiti