
Ich versuche, dieses Skript zum ordnungsgemäßen Funktionieren zu bringen, aber ich bekomme ./passmark.sh line 7: [y command not found
…
Hier ist mein Skript
#!/bin/bash
# A simple script to ask a user for a pass mark and then display a grade
# the grade will be either an A, B, C, D or F
#
CONT=y
echo
while [$CONT = "y" ]
do
echo -e "\"Please enter a pass mark: \c \""
read MARK
if [$MARK -ge "0" -a $MARK -lt "50"] ; then
echo -e "\n \"F\" \n"
elif [$MARK -ge "50" -a $MARK -lt "60"] ; then
echo -e "\n \"D\" \n"
elif [$MARK -ge "60" -a $MARK -lt "70"] ; then
echo -e "\n \"C\" \n"
elif [$MARK -ge "70" -a $MARK -lt "80"] ; then
echo -e "\n \"B\" \n"
elif [$MARK -ge "80" -a $MARK -lt "100"] ; then
echo -e "\n \"A\" \n"
else
echo -e "\"Invalid input!!\n \""
fi
echo -e "\"Would you like to enter another pass mark? (y/n) \c \""
read REPLY
case "$REPLY" in
n | N | no | No | NO ) CONT=n ;;
*) ;;
esac
echo
done
Antwort1
Sie benötigen Leerzeichen um das [
und ]
, zB
if [ "$MARK" -ge 0 -a "$MARK" -lt 50 ]; then
So wie Sie es geschrieben haben, versucht es, wenn $MARK
ist 7
, den Befehl auszuführen, [7
anstatt ihn 7
als Argument an den [
Befehl zu übergeben ( [
ist nur eine Kurzbezeichnung für test
).
Sie sollten die Variable auch in Anführungszeichen setzen. Andernfalls wird der Testausdruck nicht richtig analysiert, wenn der Benutzer eine leere Zeile oder mehrere Wörter eingibt.