Je dois trouver si un emplacement est un répertoire et s’il s’agit d’un assembly dans ShellScript
J’ai essayé ceci:
new_dir="/home/fruits/apple" if [ -d "$new_dir" ] then if [ mountpoint -q "$new_dir" ] then echo "directory is mounted" else echo "directory is not mounted" fi fi
Mais ça ne fonctionne pas. donne l’erreur comme
test_dir.sh: line 13: [: -q: binary operator expected directory is not mounted
Quelqu’un peut-il aider … J’ai besoin de ce travail …
La clé est en disant:
if [ mountpoint -q "$new_dir" ] # WRONG
Vous n’avez pas à utiliser test [
car mountpoint -q "$new_dir"
renvoie déjà un booléen. C’est tout ce dont vous avez besoin:
if mountpoint -q "$new_dir"
De l’ man point
:
Mountpoint vérifie si le répertoire est un sharepoint assembly.
Statut de sortie
Zéro si le répertoire est un sharepoint assembly, non nul sinon.
En fait, vous pouvez même dire:
mountpoint -q "$new_dir" && echo "mounted" || echo "not mounted"
Si vous voulez vraiment utiliser [ ]
, vous devez exécuter la commande et prendre en compte le statut de sortie:
if [ ! $(mountpoint -q "/home") ]; then echo "directory is mounted" else echo "directory is not mounted" fi
Remarque: je nie le résultat avec [ ! expression ]
[ ! expression ]
.
Parce que vous écriviez une expression dans le test qui n’est pas prise en charge.
man test
explique la syntaxe qu’il accepte:
[ EXPRESSION ] [ ] [ OPTION
Et il mentionne également qu’il existe avec le statut déterminé par EXPRESSION .
Lorsque vous dites sharepoint mountpoint
dans [
, bash suppose qu’il gère une expression. Compte tenu de la liste des conditions possibles ( 6.4 Expressions conditionnelles Bash ), le fait que le premier élément ne soit pas un opérateur fait que bash veut voir un opérateur binary après lui, tel que =
, =~
… Puisqu’il voit -q
, il échoue et mentionne -q
comme problème.
@fedorqui a raison
La construction conditionnelle:
if [ mountpoint -q "$new_dir" ]
est interprété comme “mountpoint” [...]
.
Donc, -q
est considéré comme l’opérateur et il n’y a pas un tel opérateur prenant deux arguments.