#!/bin/bash beenden () { [ -n "${tmpDir}" ] && rm -rf "${tmpDir}" [ -n "$1" ] && [ "$1" -ne 0 ] && >&2 echo 'Ich beende.' exit $1 } beiFehlerBeenden () { err=$? if [ ${err} -ne 0 ] && [ ${blind} -lt $1 ] then if [ -e "${tmpDir}/fehlermeldungen" ] then less "${tmpDir}/fehlermeldungen" fi beenden ${err} fi } verwendung() { >&2 echo '' >&2 echo 'Skript zum verschlüsselten Speichern von Passwörtern und anderem' >&2 echo '' >&2 echo 'Verwendung:' >&2 echo " $(basename "$0") [ -b | --blind $blindheit ] [ -g | --grep ] [ ( -d | --datei \$datei ) ( -s | --summe \$datei ) ]" >&2 echo '' >&2 echo ' -b|--blind $blindheit:' >&2 echo ' Schwere der Fehler, die ignoriert werden (0,1,2,3)' >&2 echo ' -d|--datei $datei:' >&2 echo ' verschlüsselte Datei' >&2 echo ' -g|--grep:' >&2 echo ' nach etwas greppen und in die Zwischenablage übernehmen' >&2 echo ' -s|--summe $datei' >&2 echo ' Prüfsummendatei der verschlüsselten Datei' >&2 echo '' beenden 1 } eval set -- "$( getopt -o b:d:gs: \ --long blind: \ --long datei: \ --long grep \ --long summe: \ -n "$(basename "$0")" \ -- "$@" \ || echo "verwendung" )" args=("$@") greppw=false blind=0 . #ETCDIR#/passwort-tresor.konf while true do case $1 in -b|--blind) [ "${blind}" -ne 0 ] && verwendung shift blind="$1" ;; -d|--datei) [ -n "${datei}" ] && verwendung shift datei="$1" ;; -g|--grep) greppw=true ;; -s|--summe) [ -n "${summe}" ] && verwendung shift summe="$1" ;; --) shift break ;; *) >&2 echo "FEHLER: Verstehe Option \"$1\" doch nicht!" beenden 1 esac shift done if [ $# -ne 0 ] then >&2 echo 'FEHLER: Zu viele ('$#') Argumente:' for ((i=1; i<=$#; i++)) do >&2 echo "'${!i}'" done verwendung fi if [ -n "${summe}" ] && [ -z "${datei}" ] then >&2 echo 'Keine Datei zur Prüfsumme angegeben!' verwendung fi if [ -z "${datei}" ] then datei=$(dialog --stdout --fselect "${standardDatei}" 14 70) [ -z "${datei}" ] && beenden 1 fi if [ -z "${summe}" ] then summe="${summenVerzeichnis}$(basename "${datei}" ".gpg").512" fi if [[ ! "${datei}" = *".gpg" ]] then >&2 echo 'Datei endet nicht auf ".gpg"!' beenden 1 fi ${greppw} && read -p 'suche nach: ' suche tmpDir="$(mktemp -d)" rsync "${datei}" "${tmpDir}/original" beiFehlerBeenden 0 rsync "${summe}" "${tmpDir}/summe" beiFehlerBeenden 2 cat "${tmpDir}/summe" \ | awk "{print \$1\" ${tmpDir}/original\"}" \ | sha512sum -c \ > "${tmpDir}/fehlermeldungen" beiFehlerBeenden 1 gpg --status-fd 1 -o "${tmpDir}/output" -d "${tmpDir}/original" \ 2> "${tmpDir}/fehlermeldungen" \ > "${tmpDir}/status" beiFehlerBeenden 3 grep -q "VALIDSIG ${schluessel} \(.* \)\?${schluessel}\$" "${tmpDir}/status" beiFehlerBeenden 1 if ${greppw} then for suchStr in "${suche}" "${suche}.*:\$" "^${suche}.*:\$" "^${suche}:\$" "" do [ $(grep -c "${suchStr}" "${tmpDir}/output") -eq 1 ] && break done if [ -z "${suchStr}" ] then >&2 echo "'${suche}' ist nicht genau ein Mal vorhanden!" beenden 1 fi output="$(grep -2 "${suchStr}" "${tmpDir}/output" | tail -n2)" rm -rf "${tmpDir}" echo "${output}" | head -n1 | xclip -i echo -n "." read suche echo "${output}" | tail -n1 | xclip -i echo -n "." read suche echo '' | xclip -i else sha512sum "${tmpDir}/output" > "${tmpDir}/alteSumme" ${EDITOR:-nano} "${tmpDir}/output" || beenden $? sha512sum -c "${tmpDir}/alteSumme" &> /dev/null && beenden 0 gpg -o "${tmpDir}/neu" -r "0x${schluessel}" -e -s "${tmpDir}/output" \ 2> "${tmpDir}/fehlermeldungen" beiFehlerBeenden 3 sed "s|^\S\+ |$( sha512sum "${tmpDir}/neu" | \ awk '{print $1}' ) |" -i "${tmpDir}/summe" rsync "${tmpDir}/neu" "${datei}" beiFehlerBeenden 3 rsync "${tmpDir}/summe" "${summe}" beiFehlerBeenden 1 fi beenden 0