Bash : Funktion um Files zu laden

Funktion um Dateien aus dem Internet zu laden. Prüft ob curl vorhanden ist , wenn nicht wird wget versucht. Wenn gar nichts von beiden gefunden wird wird das Skript beendet.

function get_remote_file () {
        # ------------------------- get_remote_file -------------------------------------------------------------------
        # download an file to local storage
        #
        # need 2 parameters : get_remote_file [URL_TO_FILE] [LOCAL_PATH]
        # -----------------------------------------------------------------------------------------------------------------

        if [[ ! -z "${1}" || ! -z "${2}" ]]; then
                bin_dl=""
                # check Local Path
                if [ ! -d "${2}" ]; then
                        mkdir "${2}"
                fi
                # check bins
                # using command instead of which to be posix comp.
		
		# ------ check curl
                command -v curl >/dev/null 2>&1
                if [ $? -eq 0 ]; then
                        bin_dl="curl -s -O "
                fi

		# ------ check wget
                command -v wget >/dev/null 2>&1
                if [[ ${bin_dl} = "" && $? -eq 0 ]]; then
                        bin_dl="wget -q "
                fi

		# ------ if emtpy curl and wget not found
                if [ ${bin_dl} = "" ]; then
                        echo "need curl or wget for work please install one of them"
                        exit 98
                fi

                # download file
                if [[ "${1}" =~ http:// || "${1}" =~ https:// || "${1}" =~ ftp:// ]]; then
                        # ${1} is an remote file will be downloaded to ${2}
                        cd "${2}" && { ${bin_dl} "${1}" ; cd -; }
                else
                        # ${1} is not an remote file EXIT !
                        exit 98
                fi
        else
                echo "check parameters for function #> get_remote_file"
                exit 9
        fi
}

Bash : Inhalt von ZIP Dateien vergleichen

Problem : Man möchte über Bash nur den Inhalt einer Zip Datei vergleichen. Die Zip Datei wird aber automatisiert auf einem Server über cron erstellt, was zur Folge hatte das der Zeitstempel und somit auch die md5 Summen unterschiedlich sind.

Lösung : Die Lösung ist mit unzip in die Datei zu schauen und diesen Output mit diff zu verleichen.
function check_files_in_zip () {
	# ------------------------ check_files_in_zip ---------------------------------------
	# compare the content of two zipfiles if equal the function return 0 otherwise 1 
	#
	# need 2 parameters : check_files_in_zip [NAME_OF_OLD_ZIPFILE] [NAME_OF_NEW_ZIPFILE]
	# -----------------------------------------------------------------------------------

	if [[ ! -z "${1}" || ! -z "${2}"  ]]; then
        	diff <(unzip -v -l "${1}" | awk '! /Archiv/ && /[0-9]/ { print $1,$5,$6,$7,$8 }' | sed '$d') <(unzip -v -l "${2}" | awk '! /Archiv/ && /[0-9]/ { print $1,$5,$6,$7,$8 }' | sed '$d') 1>/dev/null 2>&1
        	if [ $? -eq 0 ]; then
                	return 0
        	else
                	return 1
       		fi
	else
		echo "check parameters for function #> check_files_in_zip"
                exit 9
        fi
}

Bash : Shell Skripte überprüfen

Eine einfach Möglichkeit um Shell Skripte zu überprüfen bietet shellcheck.net an. Es lässt sich auch lokal installieren und liefert auch dort Informationen zu Bugs & Verbesserungen. Bei mir immer am Anfang einer Neuinstallation dabei ;-)

Installation unter debian :
apt-get install shellcheck


Es ist manchmal ganz interresant vorhandene Skript testen zu lassen. Unterstützt werden bash, ksh , sh (POSIX kompatibel) und zsh.

shellcheck output
shellcheck output
Shellcheck on Github
shellcheck - wiki - Fehlercodes

python : Key Press Event

Man möchte in einem Python Script einen Key Event abfangen. Das geht recht gut über curses

Beispiel :
#!/usr/bin/env python

import curses
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)

stdscr.addstr(0,10,"Hit 'q' to quit")
stdscr.refresh()

key = ''
while key != ord('q'):
    key = stdscr.getch()
    stdscr.addch(20,25,key)
    stdscr.refresh()
    if key == curses.KEY_UP: 
        stdscr.addstr(2, 20, "Up")
    elif key == curses.KEY_DOWN: 
        stdscr.addstr(3, 20, "Down")

curses.endwin()


Hier gefunden :
stackoverflow.com - allyourcode
Referenz - Python 3.5 - curses

Bash : Folder an ein Array übergeben

Alle Unterordner eines Ordners durchnummeriert anzeigen.

path=/home
array=()
while IFS= read -r -d $'\0'; do
        array+=("$REPLY")
done < <(find ${path} -maxdepth 1 -type d ! -name '.*' ! -wholename ${path} -print0 )
cnt=1
for item in "${array[@]}"
do 
        echo "${cnt}) -> ${item}" 
        ((cnt++))
done
“Die Organisationen stecken Millionen von Dollars in Firewalls und Sicherheitssysteme und verschwenden ihr Geld, da keine dieser Maßnahmen das schwächste Glied der Sicherheitskette berücksichtigt: Die Anwender und Systemadministratoren.”
Kevin Mitnick