Forum: PC-Programmierung Fehler im bash script bitte um Hilfe


von linuxnewbi (Gast)


Lesenswert?

Hallo,
wo ist denn hier genau der Fehler???
1
#!/bin/bash
2
STATICIPACTUAL = $(ifconfig tun0 | grep "inet " | cut -c14- | rev | cut -c46- | rev)

danke für die Hilfe

von Der kein Bock mehr A. (Gast)


Lesenswert?

Näher zusammenschreiben, warum das $ und wenn Du eine Ausgabe in die 
Variable haben möchtest, Backticks benutzen :

STATICIPACTUAL=`ifconfig tun0 | grep "inet " | cut -c14- | rev | cut 
-c46- | rev`

Gruß

von Arno (Gast)


Lesenswert?

Was ist denn die Fehlermeldung?

MfG, Arno

von linuxnewbi (Gast)


Lesenswert?

der fehler war ich hab es nicht eng genung zusammengeschrieben....


Hier ein nächster einfacher Fehler:
1
STATICIPACTUAL=`ifconfig tun0 | grep "inet " | cut -c14- | rev | cut 
2
-c46- | rev`
3
4
sed -i -e 's/static ip_address=10.*\/24/static ip_address=$STATICIPACTUAL\/24/' dhcpcd.conf


ich will jetzt nicht $STATICIPACTUAL sondern den inhalt da stehen 
haben.....

von Martin H. (horo)


Lesenswert?

Jörch B. schrieb:
> warum das $ und wenn Du eine Ausgabe in die
> Variable haben möchtest, Backticks benutzen
1
man bash:
Command substitution allows the output of a command to replace the 
command name. There are two forms:

          $(command)
   or
          `command`

Die Variante $() ist einfacher zu schreiben und kann vor allem 
ineinander geschachtelt werden.

von DPA (Gast)


Lesenswert?

linuxnewbi schrieb:
> ich will jetzt nicht $STATICIPACTUAL sondern den inhalt da stehen
> haben.....

Es gibt einige unterschiede zwischen single und double quotes, escapt 
und nicht escapt, etc. Hier ein paar beispiele:
1
$ X=123
2
$ X_cd=abc
3
$ echo 'ab_$X_cd'
4
ab_$X_cd
5
$ echo "ab_$X_cd"
6
ab_abc
7
$ echo "ab_${X}_cd"
8
ab_123_cd
9
$ echo 'ab_'"$X"'_cd'
10
ab_123_cd
11
$ echo ab_"$X"_cd
12
ab_123_cd

Ich würde hier die Variante mit single und double quotes kombiniert 
bevorzugen.

von linuxnewbi (Gast)


Lesenswert?

So funktioniert.....
1
sed -i -e 's/static ip_address=10.*\/24/static ip_address=$(STATICIPACTUAL)\/24/' dhcpcd.conf

es leider nicht

von DPA (Gast)


Lesenswert?

Mir ist auch noch ein Rätzel, warum man die Zeile in der dhcpcd.conf 
überhaupt ändern wollen würde. Wenn das Interface sowieso schon 
konfiguriert ist, kann man dhcpd dann nicht einfach deaktivieren? Oder 
das Interface ignorieren lassen mit einer "denyinterfaces tun0" zeile? 
Falls du die restlichen Parameter noch statisch setzen musst, das geht 
ja auch mit ip, route und ifconfig.

In den seltenen fällen, wo ich tatsächlich Configfiles automatisch 
anpassen muss, generiere ich diese mit einem Shellscript. Meistens 
genügt auch envsubst. Ich mache das meistens so:

test.template:
1
Hello $WORLD
2
3
$$WORLD = $WORLD
4
$${WORLD} = ${WORLD}

genfiles.sh:
1
#!/bin/sh
2
3
export WORLD=linuxnewbi
4
5
for template in *.template
6
do
7
  target="$(basename $template .template)"
8
  # The sed is for escaping $ using $$
9
  sed 's/\$\$/\x1/g' <"$template" | envsubst | sed 's/\x1/\$/g' >"$target"
10
done

Das ausführen von genfiles.sh erzeugt in dem beispiel dann eine Datei 
"test" mit folgendem Inhalt:
1
Hello linuxnewbi
2
3
$WORLD = linuxnewbi
4
${WORLD} = linuxnewbi

von Guest (Gast)


Lesenswert?

sed -i -e "s/static ip_address=10.*\/24/static 
ip_address=${STATICIPACTUAL}\/24/" dhcpcd.conf

Beitrag #5786709 wurde von einem Moderator gelöscht.
von otto (Gast)


Lesenswert?

linuxnewbi schrieb:
> wo ist denn hier genau der Fehler???

Das fängt damit an, daß Du Tools verwendest, die mittlerweile seit 
Jahren schon deprecated sind und in neuen Distros teilweise per Default 
garnicht mehr dabei sind.
1
ip -4 addr show primary dev tun0 | grep inet | awk '{print $2}'

Aber natürlich könnte man das auch noch viel einfacher haben
1
hostname -I

von Jens G. (jensig)


Lesenswert?

otto (Gast) schrieb:

>linuxnewbi schrieb:
>> wo ist denn hier genau der Fehler???

>Das fängt damit an, daß Du Tools verwendest, die mittlerweile seit
>Jahren schon deprecated sind und in neuen Distros teilweise per Default
>garnicht mehr dabei sind.

Vollkommen egal, ob die Tools deprecated sind, solange die Tools noch 
auf dem System vorhanden sind.

von otto (Gast)


Lesenswert?

Jens G. schrieb:
> Vollkommen egal, ob die Tools deprecated sind, solange die Tools noch
> auf dem System vorhanden sind.

Lesen bildet. Bei aktuellen RHEL Systemen zB sind die, wie ich sagte, 
eben nicht mehr dabei. Redhat hat es schon seit 10 Jahren als deprecated 
markiert.
Es gibt nur noch ab und an Patches; aber Development ist tot. Mit 
modernen Netzwerken kommt es teilweise gar nicht mehr zurecht.

Aber was soll's, installiere doch einfach veraltete Software nach, 
anstatt Dich mit aktuellen und besseren Tools zu beschäftigen. Bloß 
bring diesen Unsinn dann nicht anderen bei.

von Jens G. (jensig)


Lesenswert?

otto (Gast) schrieb:

>Jens G. schrieb:
>> Vollkommen egal, ob die Tools deprecated sind, solange die Tools noch
>> auf dem System vorhanden sind.

>Lesen bildet. Bei aktuellen RHEL Systemen zB sind die, wie ich sagte,
>eben nicht mehr dabei. Redhat hat es schon seit 10 Jahren als deprecated
>markiert.

>...

Ich würde vorschlagen, daß Du Dich erstmal durch Lesen bilden würdest, 
denn dann würdest Du merken, daß Du vollkommen an des TOs Problem vorbei 
argumentierst. Oder steht hier irgendwo, daß er wegen einem fehlenden 
Tool nicht weiterkommt?

von Daniel A. (daniel-a)


Lesenswert?

otto schrieb:
> Lesen bildet. Bei aktuellen RHEL Systemen zB sind die, wie ich sagte,
> eben nicht mehr dabei. Redhat hat es schon seit 10 Jahren als deprecated
> markiert.

Wieso tun immer alle so, als ob Linux RedHat gehören würde?
Und Ifconfig ist nicht deprecated. Es ist stabil, sowohl die Ausgabe als 
auch die Parameter, sowie immernoch weit verbreitet. Ausserdem 
funktioniert es nicht nur auf Linux, sondern auch auf FreeBSD, OpenBSD, 
AIX, etc.

von John Doe (Gast)


Lesenswert?

Daniel A. schrieb:
> otto schrieb:
>> Lesen bildet. Bei aktuellen RHEL Systemen zB sind die, wie ich sagte,
>> eben nicht mehr dabei. Redhat hat es schon seit 10 Jahren als deprecated
>> markiert.
>
> Wieso tun immer alle so, als ob Linux RedHat gehören würde?
> Und Ifconfig ist nicht deprecated. Es ist stabil, sowohl die Ausgabe als
> auch die Parameter, sowie immernoch weit verbreitet. Ausserdem
> funktioniert es nicht nur auf Linux, sondern auch auf FreeBSD, OpenBSD,
> AIX, etc.

Das Problem von ifconfig ist, dass es auf modernen Systemen teilweise 
Falschausgaben ohne Fehlermeldung erzeugt und daher für ernsthaften 
Betrieb unbrauchbar ist. Bei Infiniband kann ich das z.B. nicht 
brauchen. Daher nutze ich sowas Veraltetes auch nicht.
RedHat hat das natürlich deswegen rausgeschmissen, im professionellen 
Einsatz kann so einen Mist keiner brauchen.
Wer nur Hobby-Hardware oder Klitschen-Server einsetzt, dürfte aber 
keinen Unterschied merken.

von otto (Gast)


Lesenswert?

Jens G. schrieb:
> Ich würde vorschlagen, daß Du Dich erstmal durch Lesen bilden würdest,
> denn dann würdest Du merken, daß Du vollkommen an des TOs Problem vorbei
> argumentierst. Oder steht hier irgendwo, daß er wegen einem fehlenden
> Tool nicht weiterkommt?

OP hat noch nicht mal einen genauen Fehler angegeben. Da fängt man halt 
mit den offensichtlichsten Sachen an. Dabei bin ich noch nicht mal 
darauf eingegangen wie schlecht es ist sich dazu noch auf feste 
Positionen zu verlassen. Bei einer meiner alten Testserver gibt OP's 
"Parsing" nämlich "192.168.1.155  n" zurück. Absoluter Schrott. OP geht 
einfach mal davon aus, daß eine IP immer vom Format nnn.nnn.nnn.nnn ist 
und zählt dann Buchstaben. Von anderen Sprachen rede ich da noch nicht 
mal.


Daniel A. schrieb:
> Wieso tun immer alle so, als ob Linux RedHat gehören würde?
Weil RHEL den Enterprisemarkt dominiert? Und wenn Du CentOS und Fedora 
dazu zählst, ist der Marktanteil noch größer.

> Und Ifconfig ist nicht deprecated.
Doch, ist es. Unter RHEL&Co seit 10 Jahren.
Aber für Dich ist ja Redhat ein rotes Tuch; dumm nur daß Debian das auch 
2009 veraltet und unbenutzbar nennt: 
https://lists.debian.org/debian-devel/2009/03/msg00780.html

> Es ist stabil, sowohl die Ausgabe als
> auch die Parameter, sowie immernoch weit verbreitet.
Eben nicht. Die Ausgabe von ifconfig ist abhängig von der eingestellten 
Sprache, dh ein ach so tolles Parsing unter en-en scheitert einfach 
krachend unter de-de.

> Ausserdem
> funktioniert es nicht nur auf Linux, sondern auch auf FreeBSD, OpenBSD,
> AIX, etc.
Und Analsex funktioniert bei Frauen und Männern. Trotzdem gibt es 
besseres.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.