Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Problem s navratovou hodnotou sed  (Přečteno 1991 krát)

symmetry

  • Návštěvník
  • Příspěvků: 99
Problem s navratovou hodnotou sed
« kdy: 13 Května 2010, 23:37:11 »
Zdravím,

chtěl bych se zeptat co mohu dělat špatně když ověřuji návratovou hodnotu provedení/ neprovedení příkazu.
Dostanu hlášku:

sed: -e expression #1, char 23: unterminated 's' command
try.sh: line16 :syntax error near unexpected token 'then'

KOntroloval jsem whitespace v [ $? -eq 0 ] a to je v pořádku.

Co může být tedy špatně?

Kód: [Vybrat]
#Configuration of NETWORK INTERFACE
#FIND AND REPLACE CONFIGURATION SETTINGS IN FILE /etc/network/interfaces
interface_string="
address 192.168.0.1
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1  
dns-server 208.67.222.222";

sed -i 's/iface eth0 inet dhcp/'$interface_string'/g' /etc/network/interfaces
#DONT FORGET MAKE WHITESPACE IN if [ $? -eq 0 ]
if [ $? -eq 0 ]; then
echo "Configure of file /etc/network/interfaces done"
elif[ $? > 0 ]; then
echo "Configure of file /etc/network/interfaces failed"
fi


Děkuji za každou radu

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Problem s navratovou hodnotou sed
« Odpověď #1 kdy: 14 Května 2010, 03:41:39 »
try.sh: line16 :syntax error near unexpected token 'then'

najděte rozdíl  ;)
Kód: [Vybrat]
elif[ $? > 0 ]; then
elif [ $? > 0 ]; then
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

symmetry

  • Návštěvník
  • Příspěvků: 99
Re: Problem s navratovou hodnotou sed
« Odpověď #2 kdy: 14 Května 2010, 08:17:28 »
DIky, nevsimnul jsem si toho.

symmetry

  • Návštěvník
  • Příspěvků: 99
Re: Problem s navratovou hodnotou sed
« Odpověď #3 kdy: 14 Května 2010, 08:51:35 »
A toto oznacuje nejaky nepovoleny znak v hledanem petternu?

sed: -e expression #1, char 23: unterminated 's' command

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Problem s navratovou hodnotou sed
« Odpověď #4 kdy: 14 Května 2010, 10:48:27 »
A toto oznacuje nejaky nepovoleny znak v hledanem petternu?

sed: -e expression #1, char 23: unterminated 's' command


Ne, to znamená, že jsi ten sed napsal blbě, koukni se na ty uvozovky.

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Problem s navratovou hodnotou sed
« Odpověď #5 kdy: 14 Května 2010, 11:16:30 »
A toto oznacuje nejaky nepovoleny znak v hledanem petternu?

sed: -e expression #1, char 23: unterminated 's' command


Ne, to znamená, že jsi ten sed napsal blbě, koukni se na ty uvozovky.
.. uff. to znamena ze s command vypada takto s/// a ne s// ..

ps. a co kdyby to vypadalo takto jednoduse:

sed -i "s/iface eth0 inet dhcp/$interface_string/g" /etc/network/interfaces || echo "Configure of file /etc/network/interfaces failed"


Doufám, že neuffuješ na mě, protože jsem nenapsal nic, co by nebyla pravda. Natož by odporovalo tomu, že sen sed má neukončený díky nevhodnému použití uvozovek.
« Poslední změna: 14 Května 2010, 11:18:45 od GdH »

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Problem s navratovou hodnotou sed
« Odpověď #6 kdy: 14 Května 2010, 11:31:04 »
@GdH .. ne, jen *bad quote target

Nicméně je fakt, že by po mém příspěvku stejně nejspíš dospěl k další chybě :)

symmetry

  • Návštěvník
  • Příspěvků: 99
Re: Problem s navratovou hodnotou sed
« Odpověď #7 kdy: 14 Května 2010, 12:58:16 »
Diky za rady, s bashem mam opravdu jen male zkusenosti, nicmene pokud jsem uvozovky opravil na:
Kód: [Vybrat]
sed -i "s/iface eth0 inet dhcp/$interface_string/g" /etc/network/interfaces

Dostavam opet hlasku o "unterminated 's' command", takze jsem opet v pasti..

symmetry

  • Návštěvník
  • Příspěvků: 99
Re: Problem s navratovou hodnotou sed
« Odpověď #8 kdy: 14 Května 2010, 14:54:14 »
ALe pokud to uzavru do apostrofu>>
Kód: [Vybrat]
interface_string="
address 192.168.0.1
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1 
dns-server 208.67.222.222";

Tak by to bash vzit mel ne? Ale nevezme


GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Problem s navratovou hodnotou sed
« Odpověď #9 kdy: 14 Května 2010, 15:18:44 »
Nefunguje to proto, že proměnná má víc řádků, zkus ji definovat takto:
Kód: [Vybrat]
interface_string="\naddress 192.168.0.1\nnetmask 255.255.255.0\nbroadcast 192.168.0.255\ngateway 192.168.0.1\ndns-server 208.67.222.222";
pak normálně
Kód: [Vybrat]
sed -i "s/iface eth0 inet dhcp/$interface_string/g" /etc/network/interfaces
\n značí nový řádek
« Poslední změna: 14 Května 2010, 15:24:04 od GdH »

symmetry

  • Návštěvník
  • Příspěvků: 99
Re: Problem s navratovou hodnotou sed
« Odpověď #10 kdy: 14 Května 2010, 16:53:03 »
Nemohu si pomoci, porad to same>>

#
Kód: [Vybrat]
Configuration of NETWORK INTERFACE
#FIND AND REPLACE CONFIGURATION SETTINGS IN FILE /etc/network/interfaces
interface_string='\naddress 192.168.0.1\nnetmask 255.255.255.0\nbroadcast 192.168.0.255\ngateway 192.168.0.1\ndns-server 208.67.222.222';

#DONT FORGET MAKE WHITESPACE IN if [ $? -eq 0 ]
sed -i "s/iface eth0 inet dhcp/$interface_string/g" /etc/network/interfaces
if [ $? -eq 0 ]; then
echo "Configure of file /etc/network/interfaces done"
elif [ $? > 0 ]; then
echo "Configure of file /etc/network/interfaces failed"
fi

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Problem s navratovou hodnotou sed
« Odpověď #11 kdy: 14 Května 2010, 17:59:55 »
Pořád to samé by to určitě být nemělo, sed už ti řvát nebude. Ve skriptu ti chybí na prvním řádku #!/bin/bash, celé to musíš pouštět pod rootem a jinak ten tvůj skript funguje. Tedy neřve, mění nalezené řetězce.

Ten test na konci bych osobně zjednodušil na:
Kód: [Vybrat]
if `sed -i "s/iface eth0 inet dhcp/$interface_string/g" /etc/network/interfaces`
 then echo "Configure of file /etc/network/interfaces done"
 else echo "Configure of file /etc/network/interfaces failed"
fi

Edit: zapoměl jsem tam původně cestu, k mému zkušebnímu souboru..
« Poslední změna: 15 Května 2010, 15:12:55 od GdH »

symmetry

  • Návštěvník
  • Příspěvků: 99
Re: Problem s navratovou hodnotou sed
« Odpověď #12 kdy: 16 Května 2010, 23:56:52 »
Tak jsem to zkusil podle toho zkraeneho zapisu, sice jsem se nedopracoval ke stejne chybove hlasce ale pro zmenu dostavam hlasku, ze zadny takovy adresar, nebo soubor neexistuje. Kontroloval jsme nekolikrat, zda soubor interfaces string obsahuje, je naprosto identicky a ale stejne ho nenalezne a tim padem ani nezmeni.

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Problem s navratovou hodnotou sed
« Odpověď #13 kdy: 17 Května 2010, 12:34:51 »
Já tedy nevidím důvod, proč by to se sed-em nešlo, ten skript je funkční.
Kód: [Vybrat]
#/bin/bash
#Configuration of NETWORK INTERFACE
#FIND AND REPLACE CONFIGURATION SETTINGS IN FILE /etc/network/interfaces

interface_string='\naddress 192.168.0.1\nnetmask 255.255.255.0\nbroadcast 192.168.0.255\ngateway 192.168.0.1\ndns-server 208.67.222.222';

if `sed -i -v "s/iface eth0 inet dhcp/$interface_string/g" /etc/network/interfaces`
 then echo "Configure of file /etc/network/interfaces done"
 else echo "Configure of file /etc/network/interfaces failed"
fi

Musíš to spustit se sudo. Jinak sed ti vrátí exit code 0 i v případě, že nic nenašel, takže nezjistíš, jestli vůbec něco měnil, ale to také není problém dopsat.

symmetry

  • Návštěvník
  • Příspěvků: 99
Re: Problem s navratovou hodnotou sed
« Odpověď #14 kdy: 17 Května 2010, 19:41:19 »
Aha, to jsem tedy vubec netusil. A jak bych tedy mohl zjistit a porovnat navratovou hodnotu?

 

Provoz zaštiťuje spolek OpenAlt.