Fehler im bash script bitte um Hilfe

Gast #5785775
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ß
Gast #5785847
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.....
Gast #5785877
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.
Gast #5785921
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
Beitrag #5786709 wurde von einem Moderator gelöscht.
Gast #5788588
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
#5788865
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.
Gast #5789065
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.
#5789131
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?
#5789181
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.
Gast #5789268
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.
Gast #5789555
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren