Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: symmetry 13 Května 2010, 23:37:11

Název: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 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
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: Martin Kiklhorn 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
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 14 Května 2010, 08:17:28
DIky, nevsimnul jsem si toho.
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 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
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: GdH 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.
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: GdH 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.
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: GdH 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ě :)
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 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..
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 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

Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: GdH 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
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 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
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: GdH 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..
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 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.
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: GdH 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.
Název: Re: Problem s navratovou hodnotou sed
Přispěvatel: symmetry 17 Května 2010, 19:41:19
Aha, to jsem tedy vubec netusil. A jak bych tedy mohl zjistit a porovnat navratovou hodnotu?