shell script: “'<< " inégalée”-erreur de syntaxe à l'aide de document ici
Salut, je cherche à écrire un programme qui alerte l'utilisateur si une personne d'intérêt est venu en ligne à un moment donné. Mon programme à ce jour est
#!/usr/bin/ksh
message=""
when=""
validFiles=""
validUsers=""
if [ $# -gt 0 ] ; then
while getopts w:m: opt
do
case $opt in
w) when=$OPTARG;;
m) message=$OPTARG;;
\?) echo $USAGE exit 2;;
esac
done
shift $(($OPTIND - 1))
if [[ $# -gt 0 ]] ; then
for i; do
if [[ -f "$i" && -r "$i" ]]; then
if ! echo $validFiles | grep $i >/dev/null; then
validFiles="$validFiles $i"
fi
elif id $i 2> /dev/null 1>&2; then
if ! echo $validUsers | grep $i > /dev/null; then
validUsers="$validUsers $i"
fi
fi
done
if [[ $when != "" && $validFiles != "" || $validUsers != "" ]] ;then
for i in $validUsers; do
if ! grep $i $validFiles >/dev/null; then
at $when <<"END"
if finger $i | grep $i; then
echo "$i is online" | elm $message
fi
END
fi
done
fi
else
echo "No files or usernames"
fi
else
echo "No arguments provided"
fi
Mon problème est que lorsque je tente d'exécuter ce que je reçois le message d'erreur
syntax error at line 33 : `<<' unmatched
Je ne suis pas sûr pourquoi c'est figurant. J'ai vérifié beaucoup d'autres exemples et ma commande,ici le document, qui semble être la même que la leur. Quelqu'un pourrait-il m'aider? Merci.
OriginalL'auteur cogle | 2014-03-16
Vous devez vous connecter pour publier un commentaire.
Le délimiteur de chaîne ne doit pas être en retrait, votre
END
devrait être au début de la ligne:Si vous voulez l'arrière délimiteur de retrait, vous pouvez utiliser la syntaxe suivante, mais cela va également supprimer tous les principaux onglets partir du document lui-même (cela ne fonctionne qu'avec onglets!):
Notez que ce comportement est spécifié par POSIX donc devrait fonctionner dans tous conformes à la norme coques:
Pas sûr de comprendre votre question, les soins à la reformuler?
Alors ok, je ne peux pas le retrait de la commande est-il la possibilité de découper les espaces en trop pour moi?
Vous pouvez mettre en retrait la ici le contenu du document autant ou peu que vous voulez, il suffit de la clôture délimiteur n'est pas autorisé à être en retrait (dans le cas contraire, l'analyseur ne sais pas où est la doc ici se termine), qui ne devrait pas être un problème?
Merci un tas d'homme.
OriginalL'auteur Adrian Frühwirth