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

Bash : Parameter sauber an Skript übergeben

Parameter sauber an Skript übergeben mit getopts.

# definiere mögliche Parameter
# ------------------------------------------------

while getopts s:f:h opts; do
        case ${opts} in
                s) var1=${OPTARG} ;;
                f) var2=${OPTARG} ;;
                h) show_help ;;
        esac
done


Erklärung :
In diesem Beispiel gibt es 3 Parameter s,f und h , wenn -s angegeben wird muss ein Inhalt folgen. Also script.sh -s wirft den Fehler aus
Diese Option erfordert ein Argument -- s
das selbe würde auch auftreten wenn f ohne Inhalt angegeben wird. Das wird definiert indem bei getopts ein : hinter dem parameter steht (s:f:) bei h steht kein : hinter dem Buchstaben somit wird dieser Parameter leer aufgerufen also nur mit -h.

you want to know more :
mkssoftware.com docs getopts
wiki.bash-hackers.org - howto - getopts_tutorial

Linux Mint 18 : Pulse Audio aufzeichen

Mit diesem Skript ist es möglich eine beliebige Quelle von Pulse Audio aufzuzeichnen.
Ich habe das Skript unter Linux Mint 18 erstellt und getestet.
Es müssen die vorbis-tools installiert sein dies kann so erledigt werden !
apt-get install vorbis-tools
Hier das Skript :
#!/bin/bash
RED=$(tput setaf 1)
YELLOW=$(tput setaf 3)
WHITE=$(tput setaf 7)
NORMAL=$(tput sgr0)
if [[ ${#} -lt 1 ]]
	then
		echo ""
		echo ""
		echo "${WHITE}Bitte den PulseAudio Index angeben !!"
		count=$(pacmd list-sink-inputs | grep -E 'index:' | wc -l)
		if (( $count > 0 ));then
			echo "${YELLOW}_____________________________________________________________________"		    
			echo ""
			echo "Alle Pulseaudio Sinks werden angezeigt"
			echo "_____________________________________________________________________${RED}"
		    echo ""
			pacmd list-sink-inputs | grep -E 'index:|client:'
			echo "${YELLOW}_____________________________________________________________________"
		else
			echo "${YELLOW}_____________________________________________________________________"
		    echo ""
			echo " Wenn keine Musik läuft kann kein Sink ermittelt werden"
			echo "_____________________________________________________________________${NORMAL}"
		    echo "Bitte Skript neu starten NACHDEM die Musik gestartet wurde !"
			exit 1
		fi
		echo -n "Bitte den Index wählen : "
		read inp0
		INDEX=$inp0
	else
		INDEX=$1
	fi
if [[ ${#} -lt 2 ]]
	then
		echo "${WHITE}Bitte den Zielpfad & Namen angeben OHNE LEERZEICHEN mit ogg am Ende !${NORMAL}"
		read inp1
		FILE="$inp1"
	else
		FILE="$2"
	fi
pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam
parec -d steam.monitor | oggenc -b 192 -o $FILE --raw -


“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)