Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: juanxo12 en 10 Julio 2017, 23:25 pm



Título: ayuda comando sed shell script SO:SunOS
Publicado por: juanxo12 en 10 Julio 2017, 23:25 pm
Hola, tengo un problema con el comando sed no consigo modificar un fichero  /etc/passwd
Script tiene que cambia el directorio de conexion de un usuario
Alguna alma caritativa que conteste?
Código
  1. if [ $# -ne 3 ]
  2. then
  3. echo "uso:" $0 "<Usuario> <Nombre> <Directorio>"
  4. exit 1
  5. fi
  6. if [ ! -d "$3" ] #comprueba si ruta dada existe
  7.         then
  8. echo "El directorio no existe"
  9. exit 1
  10. fi
  11.  
  12. st=`grep "$1" /etc/passwd | grep "$2" |cut -f6 -d":"`
  13. if [ -z "$st" ]        #comprueba si vaiable st esta vacia
  14. then
  15. echo "El usuario no existe"
  16. exit 1
  17. fi
  18. echo "Quiere cambiar el directorio de conexion de " $1 "actualmente" $st "a" $3 "(S/N)?"  
  19. read op
  20. case $op in
  21. [sS])
  22. echo "Modificando fichero..."
  23. sed '/"$1"/ s/"$st"/"$3"/g' /etc/passwd >newfile  #no funciona
  24. echo "Fichero modificado"
  25. ;;
  26. *)
  27. echo "El fichero no sera modificado"
  28. exit 1
  29.                                ;;
  30. esac



edito parece que ya funciona.
Sed permite utilizar mas delimitadores pongo el codigo por si alguien tiene el mismo problema
Código
  1. if [ $# -ne 3 ]
  2. then
  3. echo "uso:" $0 "<Usuario> <Nombre> <Directorio>"
  4. exit 1
  5. fi
  6. if [ ! -d "$3" ] #comprueba si ruta dada existe
  7.         then
  8. echo "El directorio no existe"
  9. exit 1
  10. fi
  11.  
  12. st=`grep "$1" /etc/passwd | grep "$2" |cut -f6 -d":"`
  13. if [ -z "$st" ]        #comprueba si vaiable st esta vacia
  14. then
  15. echo "El usuario no existe"
  16. exit 1
  17. fi
  18. echo "Quiere cambiar el directorio de conexion de " $1 "actualmente" $st "a" $3 "(S/N)?"  
  19. read op
  20. case $op in
  21. [sS])
  22. echo "Modificando fichero..."
  23.        sed "/$1/ s+$st+$3+g" /etc/passwd >newfile
  24.                                echo "Fichero modificado"
  25.                                echo  `grep "$1" newfile | grep "$2" |cut -f6 -d":"`
  26. ;;
  27. *)
  28. echo "El fichero no sera modificado"
  29. exit 1
  30.                                ;;
  31. esac