Je voudrais vérifier si les deux fichiers existent, mais je reçois
test.sh: line 3: [: missing `]'
Quelqu’un peut-il voir ce qui ne va pas?
#!/bin/sh if [ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]; then echo "both exist" else echo "one or more is missing" fi
Essayez d’append un crochet supplémentaire.
if [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]]; then
[ -f .ssh/id_rsa -a -f .ssh/id_rsa.pub ] && echo both || echo not
ou
[[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]] && echo both || echo not
De plus, si vous utilisez la solution [[ ]]
, vous souhaiterez probablement remplacer #!/bin/sh
par #!/bin/bash
conformément au tag de votre question.
[[
est la syntaxe spécifique à bash. Pour les shells compatibles POSIX, vous avez besoin de:
[ -f file1 ] && [ -f file2 ]
if [ -e .ssh/id_rsa -a -e .ssh/id_rsa.pub ]; then echo "both exist" else echo "one or more is missing" fi
Ici,
-e vérifier que seul le fichier est exits ou non. S’il quitte, il retourne true.else, il retourne faux.
-f fait la même chose mais vérifie si le fichier donné est un fichier régulier ou non.Il retourne le vrai / faux.
Ensuite, vous utilisez &&. Donc, il faut deux crochets [[..]] à exécuter.
à la place, vous pouvez utiliser -a [même que l’opérateur &&] -o [identique à || opérateur]. Si vous avez besoin de plus d’informations, passez par ce lien