2017-10-10 2 views
0

J'essaye d'écrire un programme dans bash shell qui gère un fichier. Je dois appeler mon programme à partir de la ligne de commande de différentes manières afin qu'ils puissent imprimer des colonnes spécifiques à chaque fois. Donnons par exemple cet appel:[-f: commande non trouvée

./prog.sh -f file 

mon code pour cette partie est

if [[($1 == '-f') && ($2 == '<file>')]] ; then 
echo "do stuff and print column" 

Je reçois la colonne que je veux imprimer, mais je suis aussi obtenir l'avertissement suivant:

[-f n'a pas été trouvé

Toute idée sur la façon de supprimer l'erreur?

+4

Veuillez jeter un coup d'œil: http://www.shellcheck.net/ – Cyrus

+0

Je ne peux pas reproduire ce message d'erreur avec ce code (sur GNU Bash 4.3). Êtes-vous sûr que c'est la partie de votre code qui cause l'erreur? – wjandrea

+0

La ligne spécifique que vous avez donnée ne provoque pas l'erreur *, mais * malgré l'absence d'un [mcve] de travail, c'est une erreur avec une cause très bien comprise, pour laquelle nous avons de nombreuses questions déjà posées. –

Répondre

-2

Vous devez réécrire le contrôle de fichier comme un test pour que votre code serait:

if [[(-f $1) && ($2 == '<file>')]] ; then 
    echo "do stuff and print column" 
+1

Je ne pense pas que c'est ce que l'OP voulait dire - le '-f' est là comme un argument de drapeau –

+0

@EliranMalka oui vous avez raison, n'a pas vu cela. – CheesyMacHack

1

Assurez-vous qu'il ya de l'espace autour des crochets. [[ et ]] doivent être des jetons distincts. Les parenthèses n'ajoutent rien et peuvent être supprimées. (Si vous les laissez dont ils ont besoin aussi des espaces des deux côtés.)

if [[ $1 == '-f' && $2 == '<file>' ]]; then 
    echo "do stuff and print column" 
fi 

Pour ce que ça vaut, le chèque $2 ne devrait probablement pas être là. Toute chaîne est un nom de fichier valide.