PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : test datei auf existenz



iso
06-01-2006, 13:01
hallo, ich hab ein kleines problemchen...

ich habe hier folgendes konstrukt:

VAR=/etc

if [ -e $VAR/file ]
then

echo "file exists. delete?"

read var2


case $var2 in

1)

del;;

2)

break;;

esac


else

echo "file not exists"
fi

der test mit -e scheint nicht zu funktionieren, denn die datei wird als existent angezeigt, obwohl sie nicht da ist...
oder ist die verschachtelung nicht ok?

ninguno
06-01-2006, 13:26
also wenn ich das so durchführe dann funktionierts

iso
06-01-2006, 21:01
ja, ich weiss...

ein anderes testscript funktioniert wunderbar... zumindest der test. ich poste mal das ganze script. ist ein bisschen viel, also bequem hinsetzen.

es geht darum, ssl zertifikate für openvpn zu erstellen.
der fehlerhafte test beginnt bei:
# Pruefung zur erhaltung der my-ca.
ungefähr bei zeile 50 oder so...



#!/bin/bash

# Variablen:
KEY_DIR="/etc/openvpn/keys"
CERT_DIR="/etc/openssl/certs"
PRIVATE_DIR="/etc/openssl/private"
BASE_DIR="/etc/openvpn"

clear
echo "Version: 2005.01.05"
echo -e "\n\nDieses Script erstellt Schluessel und Zertifikate fuer"
echo "OpenVPN-Server und OpenVPN-Clients auf Basis der ct 9/2005."
echo "Bei der Nutzung bitte immer auf die Abfragen der"
echo -e "\033[36m\"common names\" \033[0machten!"

# wichtige ordner auf existenz pruefen
if [ ! -d $KEY_DIR ]
then
mkdir -p $KEY_DIR
echo -e "\n\t\033[36m$KEY_DIR erstellt\033[0m"
fi

if [ ! -d $CERT_DIR ]
then
mkdir -p $CERT_DIR
echo -e "\n\t\033[36m$CERT_DIR erstellt\033[0m"
fi

if [ ! -d $PRIVATE_DIR ]
then
mkdir -p $PRIVATE_DIR
echo -e "\n\t\033[36m$PRIVATE_DIR erstellt\033[0m"
fi

# ---------------------------
# Schleife fuer mehrfachen durchlauf
# ---------------------------

schleife=1
while [ $schleife=1 ]
do
echo -e "\n\tZertifikat erstellen fuer:"
echo -e "\n\t\t\033[4mS\033[0merver"
echo -e "\t\t\033[4mC\033[0mlient"
echo -e "\t\t\033[4mG\033[0mueltigkeit pruefen"
echo -e "\n\t\t\033[4mE\033[0mnde"

read ART
case $ART in
# ------- case s S ------------------------------------------------------
s|S)
echo -e "\n\n\tZertifikat fuer den Server wird erstellt"
echo -e "\n\tWie lange soll das Zertifikat gueltig sein? (Tage)"
read DAYS
# ---------------------------------------------------------------------
# Pruefung zur erhaltung der my-ca. (server und client compatibilitaet nach erstellung eines
# neuen serverschluessels bleiben erhalten.
if [ -e $BASE_DIR/my-ca.pem ]
then
echo -e "\n\n\t\033[31m$BASE_DIR/my-ca.pem ist vorhanden. ersetzen? [j/n)\033[0m"
read CA

case $CA in
j|J)
echo -e "\t\033[36mSchluesselpaar fuer die CA wird erzeugt.\033[0m"
openssl genrsa -aes256 -out $PRIVATE_DIR/my-cakey.pem 1024
echo -e "\n\n\t\033[36mSigniertes CA-Zertifikat wird erzeugt. Als common name gilt \"my-ca\"\033[0m\n\n"
openssl req -new -x509 -days $DAYS -key $PRIVATE_DIR/my-cakey.pem -out $BASE_DIR/my-ca.pem -set_serial 1
echo -e "\n\n\t\033[36mSerial wird auf 01 gesetzt\033[0m"
echo 01 > serial
echo -e "\n\n\t\033[36mindex.txt wird erstellt\033[0m"
touch index.txt
;;

n|N)
break
;;

*)
echo -e "\t\t\033[31mDie Auswahl ($CA) war nicht gueltig \033[0m"
;;
esac

else
echo -e "\n\n\t\033[31m$BASE_DIR/my-ca.pem ist vorhanden, CA bleibt erhalten.\033[0m"
fi

echo -e "\n\n\t\033[36mSchluesselpaar fuer den Server wird erstellt. Als common name gilt \"server\"\033[0m"
openssl req -new -newkey rsa:1024 -out $CERT_DIR/servercsr.pem -nodes -keyout $PRIVATE_DIR/serverkey.pem -days $DAYS
echo -e "\n\n\t\033[36mServer-Zertifikat wird erzeugt\033[0m\n\n"
openssl x509 -req -in $CERT_DIR/servercsr.pem -out $CERT_DIR/servercert.pem -CA $BASE_DIR/my-ca.pem -CAkey $PRIVATE_DIR/my-cakey.pem -CAserial /etc/openssl/serial -days $DAYS

# Pruefung zur erhaltung des DH.
if [ -e $BASE_DIR/dh1024.pem ]
then
echo -e "\t\n\n\033[36mDiffie-Hellman-Parameter ist vorhanden. ersetzen? [j/n]\033[0m"
read DH

case $DH in
j|J)
openssl dhparam -out $BASE_DIR/dh1024.pem 512
;;

n|N)
break
;;

*)
echo -e "\n\t\t\033[31mDie Auswahl ($DH) war nicht gueltig \033[0m"
;;
esac
else
echo -e "\n\n\t\033[36m$BASE_DIR/da1024.pem ist vorhanden, DH bleibt erhalten.\033[0m"
fi

echo -e "\n\n\t\033[36mserver-daten werden nach \"/etc/openvpn\" kopiert\033[0m\n\n"
cp -v $PRIVATE_DIR/serverkey.pem $BASE_DIR/
cp -v $CERT_DIR/servercert.pem $BASE_DIR/
echo -e "\n\n\tGueltigkeit:"
openssl x509 -in $BASE_DIR/servercert.pem -text | grep After
;;

# ------- case c -------------------------------------------------------
c|C)
echo -e "\n\n\t\\033[36mBitte den \"common name\" fuer das Zertifikat eingeben:\033[0m"
read NAME
echo -e "\n\t\033[36mWie lange soll das Zertifikat gueltig sein? (Tage)\033[0m"
read DAYS

if [ ! -d $KEY_DIR/$NAME ]
then
mkdir -p $KEY_DIR/$NAME
echo -e "\n\t\033[36m$KEY_DIR/$NAME erstellt\033[0m"
fi

echo -e "\n\n\t\033[36mZertifikat fuer \"$NAME\" wird erstellt\033[0m\n\n"
openssl req -new -newkey rsa:1024 -out $CERT_DIR/${NAME}csr.pem -nodes -keyout $PRIVATE_DIR/${NAME}key.pem -days $DAYS
openssl x509 -req -in $CERT_DIR/${NAME}csr.pem -out $CERT_DIR/${NAME}cert.pem -CA $BASE_DIR/my-ca.pem -CAkey $PRIVATE_DIR/my-cakey.pem -CAserial /etc/openssl/serial -days $DAYS
echo -e "\n\n\t\033[36mDie fuer $NAME benoetigten Dateien werden nach $KEY_DIR kopiert\033[0m\n\n"
cp -v $PRIVATE_DIR/${NAME}key.pem $KEY_DIR/$NAME/
cp -v $CERT_DIR/${NAME}cert.pem $KEY_DIR/$NAME/

echo -e "\n\n\t\033[36mDie fuer den Clienten \"$NAME\" benoetigten Dateien sind:\033[0m"
echo "$KEY_DIR/${NAME}/${NAME}key.pem"
echo "$KEY_DIR/${NAME}/${NAME}cert.pem"
echo "$BASE_DIR/my-ca.pem"
echo -e "\n\n\t\033[36mGueltigkeit:\033[0m"
openssl x509 -in $CERT_DIR/${NAME}cert.pem -text | grep After
;;

# ------- case g -------------------------------------------------------
g|G)
echo -e "\n\n\t\033[36mCommon Name:\033[0m"
read NAME
openssl x509 -in $CERT_DIR/${NAME}cert.pem -text | grep Before
openssl x509 -in $CERT_DIR/${NAME}cert.pem -text | grep After
;;

# ------- case e --------------------------------------------------------
e|E)
break
;;

# ------- case default ---------------------------------------------------
*)
clear
echo -e "\n\n\t\t\033[31mDie Auswahl war nicht gueltig \033[0m"
;;

esac

done

exit 0

# History:
# 2005-01-05: ueberfluessige echo durch \n ersetzt
# 2005-01-05: farbliche hervorhebungen: rot: warnung, blau: nachricht
# 2005-01-04: zahlenmenue durch ersten buchstaben ersetzt (unterstrich)

ninguno
07-01-2006, 08:30
also der test auf existenz der datei funktioniert jedenfalls. was ist denn jetzt genau das problem?

iso
07-01-2006, 17:18
alles klar, der test funktioniert auch. war ein programmierfehler von mir. trotzdem danke für die hilfe.