Erreur script SH

Fermé
touillettes - 16 oct. 2009 à 19:51
 touillettes - 17 oct. 2009 à 14:09
Bonjour, je devellope un script shell qui doit émuler les les fonctionalité simple d'une base de donnée mais 2 probléme se pose a moi je vous les expose

Probléme n°1 :

Voila mon script :

#!/bin/sh

file=sh.db

usage()
{
echo "bdsh.sh [-k] [-f <db_file>] (put (<clef> | $<clef>) (<valeur> | $<clef>) |
del (<clef> | $<clef>) [<valeur> | $<clef>] |
select [<expr> | $<clef>] )"

}

while getopts k:f: option
do
case $option in
f) file="$OPTARG"
shift 2
;;

k) echo lol;;
esac
done


check()
{
echo "FONCTION SELECT"
if [ $1 = "select"]
then
echo "lol"
fi
}
check


exit 0

et quand je l'éxécute

$> sh bdsh.sh -f lol select
FONCTION SELECT
[: 33: missing ]

Pourriez vous me dire a quoi correspond [: 33: missing ] ?

problème n°2 :

est t'il possible via un sed ou un grep de rediriger le résultat dans le mếme fichier que celui sur lequel j'éffectue le traitement ?

exemple

Je veux supprimer les lignes contenant le mot bonjour dans le fichier test
le fichier test :
lol
Bonjour
oki



ma ligne de commande :
$> sed '/Bonjour/d' test
lol
oki
$>

$> sed '/Bonjour/d' test > test
$>

le fichier test devient vide
auriez vous une technique sans fichier intermédiaire pour rediriger le résultat dans le fichier sans en effacer tout le contenu ?

merci d'avance

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 oct. 2009 à 10:47
Salut,

Pour le 1 : if [ $1 = "select"]
Il faut des espaces autour des crochets :

if [ $1 = "select" ] 

et il vaut mieux aussi entourer chaque variable par des quotes doubles (sauf emploi des doubles crochets :

if [ "$1" = "select" ] ou if [[ $1 = "select" ]]


Pour le 2 :

sed -i.bak '/Bonjour/d' test 

Voir à ce sujet dans la FAQ :
Sed - Introduction à SED - Part I
Sed - Introduction à SED - Part II
Sed - Introduction à SED - Part III
0
touillettes
17 oct. 2009 à 14:09
Merci :)
0