Aufgaben Bash diverses: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 101: Zeile 101:
 
* ...oder das in ''Exec=...'' aufgeführte Kommando ausführen, falls Teile des Anwendungsnamens angegeben werden
 
* ...oder das in ''Exec=...'' aufgeführte Kommando ausführen, falls Teile des Anwendungsnamens angegeben werden
  
<!--
+
 
 
<syntaxhighlight lang=bash>
 
<syntaxhighlight lang=bash>
 
#!/bin/bash
 
#!/bin/bash

Version vom 5. Juni 2023, 20:41 Uhr

Aufgabe: Benutzerverwaltung

Schreibe ein Bash-Script, das die Benutzerverwaltung auf einem Linux-System unterstützt. Das Skript sollte die folgenden Funktionen bereitstellen
  • Benutzer hinzufügen
  • Benutzer löschen
  • Benutzer deaktivieren
  • Benutzer aktivieren
  • Benutzerliste anzeigen
Das Skript sollte eine while-Schleife verwenden, um Benutzereingaben entgegenzunehmen,
    • eine if-Bedingung, um den entsprechenden Code für die ausgewählte Aktion auszuführen,
    • und eine case-Anweisung, um die verschiedenen Optionen zu behandeln.
  • Es sollte Functionen enthalten.

Starten von Desktopanwendungen

  • Schreiben Sie ein Skript, welches in den Ordnern /usr/share/applications, ~/.local/share/applications und ~/Desktop nach .desktop-Dateien sucht
  • Falls die Datei Name=... und Exec=... enthält sollen diese in einem assoziativen Array gespeichert werden (Key-Value Paar)
  • Danach soll das Skript die Möglichkeit bieten alle Namen in less anzuzeigen...
  • ...oder das in Exec=... aufgeführte Kommando ausführen, falls Teile des Anwendungsnamens angegeben werden


#!/bin/bash
DESKTOP=/usr/share/applications:~/.local/share/applications:~/Desktop
declare -A OPTIONS

# Suche alle .desktop Dateien
for d in $(echo $DESKTOP | sed "s/:/\n/g"); do
    for i in $(ls $d/*.desktop 2> /dev/null); do 
	APPS+=("$i")
    done
done

# Verbinde Anwendungsnamen mit Kommandozeilenbefehl
for a in "${APPS[@]}"; do
    KEY=$(grep -m 1 "^Name=" $a | cut -d "=" -f 2)
    VAL=$(grep -m 1 "^Exec=" $a | cut -d "=" -f 2 | cut -d "%" -f 1)
    [ "$KEY" ] && OPTIONS["$KEY"]=$VAL && NAMES+="$KEY\n"
done

# Eingabe von l zeigt die gefunden Namen
# Sonst wird der erste grep Match ausgeführt
while true; do
    echo -n "Enter l to list Apps: " ; read CHOICE
    case $CHOICE in
	"l")
	    echo -e "$NAMES" | less
	    ;;
	*)
	    MATCH=$(echo -e "$NAMES" | grep -m 1 -i $CHOICE)
	    eval "${OPTIONS[$MATCH]}"
	    exit 0
	    ;;
    esac
done