staging.inyokaproject.org

shell script richtig?

Status: Gelöst | Ubuntu-Version: Xubuntu 18.04 (Bionic Beaver)
Antworten |

matze31

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Hallo, ich bin noch in den Anfängen im Thema shell Scripten, habe jetzt mit meinen bisherigen Wissen ein Script gebaut was in der Firewall prüft ob meine aktuelle ip noch gültig ist, wenn nicht wird sie gelöscht (und wenn ich das Script erweitere dann wieder neu erstellt in der ufw). Vielleicht kann ja mal jemand drüber schauen ob es Fehler gibt oder so. Im Prinzip funzt es ja, aber ich möchte ja lernen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/bash

aktuelle_ip=$(nslookup dyndns | grep "Address:" | grep -v "127" |  cut -d: -f2  | tr -d " ")
ufw_ip=$(ufw status numbered  | grep "1111)
# grep "1111" ist der port


if [ -n "$ufw_ip" ]
then
echo "ja"
ufw_number=$(sed 's/\[//g' <<<"$ufw_ip" | cut -d] -f1)

if [[ -z $(grep $aktuelle_ip <<< $ufw_ip) ]]
then
echo "different"
yes | ufw delete "$ufw_number"
fi

else 
echo "keine ip"

fi

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

matze31 schrieb:

[…]

#!/usr/bin/bash

aktuelle_ip=$(nslookup dyndns | grep "Address:" | grep -v "127" |  cut -d: -f2  | tr -d " ")
ufw_ip=$(ufw status numbered  | grep "1111)

Wie bereits an der Formatierung durch die Farbgebung erkennbar, wird alles nach dem von mir markierten Zeichen falsch interpretiert. Entferne es. Möglicherweise gibt es dann im folgenden Text weitere Syntaxfehler.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Oh sorry, habe ich wohl zum Schluss vergessen. Ist das andere so ok?

Bei einer if-Anweisung kann man mit einfachen [ oder mit doppelten [[ arbeiten?

Yosijo

Avatar von Yosijo

Anmeldungsdatum:
6. Februar 2012

Beiträge: 33

Ein paar dinge gibt es:

1. Benutze für das Shebang lieber /usr/bin/env, das ist stabiler.

2. Da du grep nutzt, solltest du dich mal mit -E und -P befassen. RegEx ist hier das Zauberwort und könnte dir einiges erleichtern.

3. Nutzte mehr ${variable_name}, das ist sicherer/stabieler und du kannst gleich Parameter Substitution nutzten.

3.1. Parameter Substitution: https://tldp.org/LDP/abs/html/parameter-substitution.html

4. Schreibweise und Einrückungen. Eine gängige Schreibweise für if und schleifen die ich nur mal erwähnt haben wollte wäre folgende:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
…
if [[ -z test_variable ]]; then
  foo
else
  baa
fi
…
while true; do
  if [[ -z test_variable ]]; then
    foo
  else
    baa
  fi
done

5. Wenn du dich da weiter Entwickeln willst, würde ich recht früh empfehlen sich mit Git zu befassen.

Das sind so die ersten Dinge die mir dazu eingefallen sind.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Ok vielen Dank.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Anbei nochmal eine Frage, wozu ist das 'git' so wichtig? Ist das, wenn man richtig (viel) mit bash programmiert, so von Vorteil?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

matze31 schrieb:

[…] wozu ist das 'git' so wichtig?

GIT ist eine Methode und eine Plattform zur Verwaltung von Software-Projekten und den Quelltext-Dateien dieser Projekte. Da es mit Textdateien arbeitet, ist es für jede Programmiersprache anwendbar. Dringend zu empfehlen ist es bei größeren Projekten, die also

  • aus mehreren oder sogar vielen Dateien bestehen,

  • an denen mehrere Programmierer gleichzeitig arbeiten,

  • die in mehreren Versionen existieren.

Ist das, wenn man richtig (viel) mit bash programmiert, so von Vorteil?

Für ein einzelnes kurzes Shell-Skript ist GIT Overkill, aber natürlich ist seine Verwendung nicht verboten. Wenn das Skript etwa 200 Zeilen (meine persönliche Schmerzgrenze, kein Absolutum) überschreitet, sollte man überlegen, ob man die dem Problem angemessene Programmiersprache verwendet.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Also kann man git auch für andere Programmiersprachen nehmen?

kB schrieb:

Wenn das Skript etwa 200 Zeilen (meine persönliche Schmerzgrenze, kein Absolutum) überschreitet

meinst du damit, dass ein shell script das nicht sollte?

Yosijo

Avatar von Yosijo

Anmeldungsdatum:
6. Februar 2012

Beiträge: 33

Ich denke hier geht es stark um die Komplexität eines Projektes bszw. Scriptes. Sowohl für die Frage, ob Git, ls auch die Frage ob man in eine Programmiersprache nutzten sollte. Ich kann nur aus eigener Erfahrung sagen, das ich mit der Zeit sehr viele Scripte geschrieben haben die unübersichtlich, schlecht Kommentiert waren usw. und dadurch heute in einem einsamen Ordner vergammeln. Sicherlich eine der Folgen, weil ich spät angefangen habe, zu Kommentieren ,aber auch git einzusetzen. Dadurch kann ich heute, schwer einzelne Entwicklungsstufen des Scripts nicht mehr nachvollziehen und obwohl ich es geschrieben habe, sitze ich davor und darf es mir im Grunde noch mal von Anfang bis zum ende durchlesen. Da hat die Einführung von Git mir schon sehr geholfen, da ich Strukturierter an die Änderungen gehe und diese Historisch auch nachvollziehen kann. Das die Programmiersprache angeht, habe ich sicherlich dutzende Scripte die bspw. in Python einfacher Umzusetzen gewesen wären. Da mein KnowHow hier aber immer noch dürftig ist, belasse ich es nach wie vor, bei Bash.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

OK vielen dank für das ausführliche Feedback. Ich habe mich schon seit 4 Jahren mit Python beschäftigt und komme ganz gut zurecht. Aber ich werde auf jeden Fall mal git testen.

Antworten |