• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Bash Script anschauen

Tiran

Newbie
Hab da mal ne frage zu einem script und zwar ein Fehler steckt dort nicht drin aber wollte nur mal hören ob es gut programmiert ist? Bin noch anfänger auf der Bash.
Oder ob man das anders lösen kann.

Code:
#!/bin/sh

# squid.conf path
squid_path=/etc/squid/squid.conf


case $1 in

	-e)
	erg=`grep -n ".*TAG: $2" $squid_path | sed "s/:/\n/" | sed '2,$d'`
	sed -n "$erg,/^\#  TAG: /p" $squid_path > erg.txt
	erg3=`grep -n "#  TAG: " erg.txt | sed 's/:/\n/' | sed -n '3,3p'`
	sed  "$erg3,/^#/d" erg.txt > erg1.txt
	rm erg.txt
	mv erg1.txt erg.txt
	echo -e "\033[0;31m$suche Inhalt:\033[0m"
	echo -e "\033[0;31mZeile in der Config:\033[0;32m zeile $erg\033[0m\n"
	cat erg.txt
	echo -e "\033[0;31mZeilenende in der Config:\033[0;32m zeile $(($erg3+$erg))\033[0m"
	echo -e "\033[0;31mGesetze Einträge: \033[0m"
	sed -n '/^[^#]/p' erg.txt
	rm erg.txt
	break;;
	
	all)
	grep "#  TAG:.*" $squid_path | grep -n ""
 	break;;
	*)
	echo "Usage:"
	echo -e "\t -e\t <eintrag-name> Nummer angabe noch nicht verfügbar"
	echo -e "\tall\t Liste aller einträge"
	break;;
esac

einfach mal aus probieren.

MfG
Alexander
 

regexer

Advanced Hacker
Tiran schrieb:
Hab da mal ne frage zu einem script und zwar ein Fehler steckt dort nicht drin aber wollte nur mal hören ob es gut programmiert ist? Bin noch anfänger auf der Bash.
Oder ob man das anders lösen kann.
Grundsätzlich sind keine groben Fehler drin. Meine Anmerkungen:

- Den break kann man sich sparen. Der ist eher für Schleifen usw. interessant.
- der ".*" beim grep ist überflüssig.
- die beiden sed-Befehle zur Erzeugung der Zeilennummer könnte man durch einen cut ersetzen. Besser ist es jedoch, gleich den Befehl "=" sed zu verwenden (Ausgabe der Zeilennummer).
- den rm vor dem mv kann man sich auch sparen. Der mv macht die Datei genauso platt.
- $suche im echo "Inhalt" ist nicht belegt ???
- Außerdem sollte man eine Verarbeitung für den Fall einbauen, dass keine Treffer gefunden werden
- ... und eine Verarbeitung einbauen, falls man ans Dateiende gelangt.

Ich würde sogar ohne die Zwischendateien erg.txt usw. arbeiten. Und mit folgenden Schritten:

1. Zeilennummer des ersten Treffers ermitteln
2. Zeilennummer des zweiten Treffers ermitteln
3. Die Zeilen dazwischen mit sed ausgeben
4. Die nicht-Kommentarzeilen mit sed ausgeben

Wahrscheinlich kann man da sogar komplett ein sed-Script draus machen. Aber sooo sattelfest bin ich im sed auch nicht...

Code:
squid_path=/etc/squid/squid.conf

case $1 in

   -e)
   erg=`sed -n "/TAG: $2/=" $squid_path`
   if [ "$erg" = "" ]
   then
     echo "Keine Treffer"
   else
     let erg2=${erg}+1
     erg3=`sed -n ${erg2}',${/#  TAG: /{=;q}}' $squid_path`
     if [ "$erg3" = "" ]
     then
       erg3=`sed -n '$=' $squid_path`   # letzte Zeile
     else
       let erg3--    # Tag-Treffer minus 1
     fi
     echo -e "\033[0;31m$suche Inhalt:\033[0m"
     echo -e "\033[0;31mZeile in der Config:\033[0;32m zeile $erg\033[0m\n"
     sed -n "$erg,${erg3}p" $squid_path
     echo -e "\033[0;31mZeilenende in der Config:\033[0;32m zeile $erg3\033[0m"
     echo -e "\033[0;31mGesetze Einträge: \033[0m"
     sed -n "$erg,$erg3{/^[^#]/p}" $squid_path
   fi
   ;;

   all)
   grep "#  TAG:" $squid_path | grep -n ""
   ;;

   *)
   echo "Usage:"
   echo -e "\t -e\t <eintrag-name> Nummer angabe noch nicht verfügbar"
   echo -e "\tall\t Liste aller einträge"
   ;;
esac
 
Oben