Script com Sed

1. Script com Sed

Andrey
andreymp

(usa Slackware)

Enviado em 07/05/2008 - 12:38h

Estou fazendo um script onde preciso varrer arquivos e substituir pelo dado que o usuário digitar.

Estou usando o seguinte comando:

sed '/vl/s/tx/$nome/g' /local/$nome2/arquivo.conf > /local/$nome2/arquivo2.conf

Onde:
vl = condição para substituir
tx = palavra a encontrar
$nome = entrada do usuário
$nome2 = entrada do usuário

Dúvida:
1ª Como eu coloco no sed e no local para aparecer a entrada do usuário ? deixando assim ele substitui no texto por $nome e $nome2 e não com a valor que o usuário entrou.

2ª Estou digitando killall -u $user mais ele não esta dando kill na seção. Qual seria a sintaxe correta ?

Fico no aguardo e agradeço desde já !


  


2. Re: Script com Sed

Denis Doria
thuck

(usa Debian)

Enviado em 07/05/2008 - 14:21h

Olá; seria mais ou menos isso:

read $NOME

sed "/vl/s/tx/$Shell Script/" <arquivo>

Você deve usar aspas duplas, se você usar aspas simples o shell não vai 'resolver' a variável.


3. continua o erro

Andrey
andreymp

(usa Slackware)

Enviado em 07/05/2008 - 14:54h

o meu problema continua:

Meu código está assim:

$host = $hostnome
$charconf = /home/"${host}"/cronab/conf/char_athena.conf
$charconf2 = /home/"${host}"/cronab/conf/char_athena2.conf

sed "/userid/s/s1/${svdb}/g" $charconf" > "$charconf2
sed "/passwd/s/p1/${svpw}/g" $charconf2 > $charconf


Agora aparece isso ao rodar:
./arquivo.sh: line 75: $charconf: ambiguous redirect
./arquivo.sh: line 76: $charconf2: ambiguous redirect


O que pode ser ?



4. Re: Script com Sed

Denis Doria
thuck

(usa Debian)

Enviado em 07/05/2008 - 16:46h

Tente assim:


$host = $hostnome
$charconf="/home/${host}/cronab/conf/char_athena.conf"
$charconf2="/home/${host}/cronab/conf/char_athena2.conf"

read svdb

read svpw

sed "/userid/s/s1/${svdb}/g" $charconf > $charconf2
sed "/passwd/s/p1/${svpw}/g" $charconf2 > $charconf

Lembrando que a redireção '>' vai apagar todo seu arquivo antes de escrever a saída.


5. continua o erro

Andrey
andreymp

(usa Slackware)

Enviado em 07/05/2008 - 17:14h

É o erro que está dando agora:

./new.sh: line 74: $charconf2: ambiguous redirect
./new.sh: line 75: $charconf: ambiguous redirect
./new.sh: line 76: $charconf2: ambiguous redirect
./new.sh: line 77: $charconf: ambiguous redirect
./new.sh: line 78: $charconf2: ambiguous redirect
./new.sh: line 79: $charconf: ambiguous redirect
./new.sh: line 80: $charconf2: ambiguous redirect

:(


Código:


echo "IP do servidor: "
read ip
echo "Usuário da database: "
read svdb
echo "Senha do usuário da database: "
read svpw
############################################
# Variáveis e backups #
############################################
$host = $hostnome
$loginconf = /home/${host}/cronus/conf/login_athena.conf
$loginconf2 = /home/${host}/cronus/conf/login_athena2.conf
$charconf = /home/${host}/cronus/conf/char_athena.conf
$charconf2 = /home/${host}/cronus/conf/char_athena2.conf
$mapconf = /home/${host}/cronus/conf/map_athena.conf
$mapconf2 = /home/${host}/cronus/conf/map_athena2.conf
clear;
############################################
# Edição do char_athena.conf #
############################################
sed "/userid/s/s1/${svdb}/g" $charconf > $charconf2
sed "/passwd/s/p1/${svpw}/g" $charconf2 > $charconf
sed "/server_name/s/Cronus/${svnome}/g" $charconf > $charconf2
sed "/wisp_server_name/s/Server/${svchat}/g" $charconf2 > $charconf
sed "/login_ip/s/127.0.0.1/${ip}/g" $charconf > $charconf2
sed "/bind_ip/s/127.0.0.1/${ip}/g" $charconf2 > $charconf
sed "/char_ip/s/127.0.0.1/${ip}/g" $charconf > $charconf2
echo "Arquivo char-athena.conf - configurado com êxito."


6. Re: Script com Sed

Denis Doria
thuck

(usa Debian)

Enviado em 07/05/2008 - 18:35h

Cara, vc está usando o Bash???

Ou está usando outro shell???

O começo do seu script tem:

#!/bin/bash




7. Re: Script com Sed

Andrey
andreymp

(usa Slackware)

Enviado em 08/05/2008 - 01:21h

É com bash sim bin bash.


8. Re: Script com Sed

Denis Doria
thuck

(usa Debian)

Enviado em 08/05/2008 - 15:13h

Bem... estranho aqui fiz alguns modificações e funcionou tudo bem:

#!/bin/bash

HOST=$(hostname)
charconf=$(echo '/home/thuck/char_athena.conf')
charconf2=$(echo '/home/thuck/char_athena2.conf')

echo $charconf
read svdb

echo $charconf2

read svpw

sed "/userid/s/s1/${svdb}/g" $charconf > $charconf2
sed "/passwd/s/p1/${svpw}/g" $charconf2 > $charconf

Vc está definindo as variáveis de maneira incorreta, não existe $var = 'valor'; o que existe é var='valor'; o $ é apenas quando vc vai usar a variável e não quando vai criá-la.



9. continua

Andrey
andreymp

(usa Slackware)

Enviado em 10/05/2008 - 03:14h

Erro que aparece agora:

./new.sh: line 63: hostnome: command not found
Host = not found: 3(NXDOMAIN)
./new.sh: line 64: =: command not found
./new.sh: line 65: =: command not found
./new.sh: line 66: =: command not found
./new.sh: line 67: /home/${host}/cronus/conf/char_athena2.conf: No such file or directory
./new.sh: line 67: =: command not found
./new.sh: line 68: =: command not found
./new.sh: line 69: =: command not found


Parte do meu script que faz esse processo:

Configurar() {
echo "Login do host: "
read hostnome
echo "Nome do servidor: "
read svnome
echo "Nome de exibição no chat: "
read svchat
echo "IP do servidor: "
read ip
echo "Usuário da database: "
read svdb
echo "Senha do usuário da database: "
read svpw
############################################
# Variáveis e backups #
############################################
host = $(hostnome)
$loginconf = /home/${host}/cronus/conf/login_athena.conf
$loginconf2 = /home/${host}/cronus/conf/login_athena2.conf
$charconf = $(echo '/home/${host}/cronus/conf/char_athena.conf')
$charconf2 = $('/home/${host}/cronus/conf/char_athena2.conf')
$mapconf = /home/${host}/cronus/conf/map_athena.conf
$mapconf2 = /home/${host}/cronus/conf/map_athena2.conf
clear;
############################################
# Edição do char_athena.conf #
############################################
echo $charconf
read svpw
sed "/userid/s/s1/${svdb}/g" $charconf > $charconf2
sed "/passwd/s/p1/${svpw}/g" $charconf2 > $charconf
sed "/server_name/s/Cronus/${svnome}/g" $charconf > $charconf2
sed "/wisp_server_name/s/Server/${svchat}/g" $charconf2 > $charconf
sed "/login_ip/s/127.0.0.1/${ip}/g" $charconf > $charconf2
sed "/bind_ip/s/127.0.0.1/${ip}/g" $charconf2 > $charconf
sed "/char_ip/s/127.0.0.1/${ip}/g" $charconf > $charconf2
echo "Arquivo char-athena.conf - configurado com êxito."


10. Re: Script com Sed

Denis Doria
thuck

(usa Debian)

Enviado em 12/05/2008 - 11:46h

Deve funcionar agora:


Configurar() {
echo "Login do host: "
read hostnome
echo "Nome do servidor: "
read svnome
echo "Nome de exibição no chat: "
read svchat
echo "IP do servidor: "
read ip
echo "Usuário da database: "
read svdb
echo "Senha do usuário da database: "
read svpw
############################################
# Variáveis e backups #
############################################
host = $hostnome
loginconf = "/home/${host}/cronus/conf/login_athena.conf"
loginconf2 = "/home/${host}/cronus/conf/login_athena2.conf"
charconf = "/home/${host}/cronus/conf/char_athena.conf"
charconf2 ="/home/${host}/cronus/conf/char_athena2.conf"
mapconf = "/home/${host}/cronus/conf/map_athena.conf"
mapconf2 = "/home/${host}/cronus/conf/map_athena2.conf"
clear;
############################################
# Edição do char_athena.conf #
############################################
echo $charconf
read svpw
sed "/userid/s/s1/${svdb}/g" $charconf > $charconf2
sed "/passwd/s/p1/${svpw}/g" $charconf2 > $charconf
sed "/server_name/s/Cronus/${svnome}/g" $charconf > $charconf2
sed "/wisp_server_name/s/Server/${svchat}/g" $charconf2 > $charconf
sed "/login_ip/s/127.0.0.1/${ip}/g" $charconf > $charconf2
sed "/bind_ip/s/127.0.0.1/${ip}/g" $charconf2 > $charconf
sed "/char_ip/s/127.0.0.1/${ip}/g" $charconf > $charconf2
echo "Arquivo char-athena.conf - configurado com êxito."


11. Re: Script com Sed

Andrey
andreymp

(usa Slackware)

Enviado em 13/05/2008 - 10:43h

Fiz exatamente como você falou e o erro foi o seguinte:

host: couldn't get address for 'nomedoservir': not found
./new.sh: line 64: =: command not found
./new.sh: line 65: =: command not found
./new.sh: line 66: =: command not found
./new.sh: line 67: =: command not found
./new.sh: line 68: =: command not found
./new.sh: line 69: =: command not found

onde nomedoservidor é o que eu digito quando ele pede o login do host


12. Re: Script com Sed

Denis Doria
thuck

(usa Debian)

Enviado em 13/05/2008 - 15:33h

Altere a linha 'host = $hostnome' para '_host = $hostnome' e mude em todos os lugares o host por _host.
O que acontece é que host é um comando válido do linux e comando ter prioridade sobre variáveis.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts