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
-
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ě?
#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
-
try.sh: line16 :syntax error near unexpected token 'then'
najděte rozdíl ;)
elif[ $? > 0 ]; then
elif [ $? > 0 ]; then
-
DIky, nevsimnul jsem si toho.
-
A toto oznacuje nejaky nepovoleny znak v hledanem petternu?
sed: -e expression #1, char 23: unterminated 's' command
-
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.
-
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.
-
@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ě :)
-
Diky za rady, s bashem mam opravdu jen male zkusenosti, nicmene pokud jsem uvozovky opravil na:
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..
-
ALe pokud to uzavru do apostrofu>>
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
-
Nefunguje to proto, že proměnná má víc řádků, zkus ji definovat takto:
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ě
sed -i "s/iface eth0 inet dhcp/$interface_string/g" /etc/network/interfaces
\n značí nový řádek
-
Nemohu si pomoci, porad to same>>
#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
-
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:
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..
-
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.
-
Já tedy nevidím důvod, proč by to se sed-em nešlo, ten skript je funkční.
#/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.
-
Aha, to jsem tedy vubec netusil. A jak bych tedy mohl zjistit a porovnat navratovou hodnotu?