[ Résolu ] Aide Shell
Forum Programmation : [ Résolu ] Aide Shell
Alors voila j'ai des exercices a faire sur la programmation en shell. Mais notre prof est super bidon, donc je n'ai rien compris et je ne suis pas le seul
Voici les énoncés :
5. Ecrire un script shell qui permet de créer le répertoire rep07-08 sous le répertoire passé en paramètre, et affiche le message "Création refusée" si la création a échoué, ou le message "création réussie" dans le cas contraire.
Tester avec les répertoires suivants :
le répertoire courant
le répertoire /dev
votre home (répertoire de login)
6. Ecrire un script shell qui teste qu'il y a exactement deux paramètres et que le premier paramètre est un répertoire accesible en écriture. Le second paramètre est le nom d'un fichier ordinaire. Si le fichier existe dans ce répertoire, conserver celui qui a la plus grande taille en octets. Si le fichier n'exite pas il faut le copier.
Alors si vous pourriez m"aidez, me donner les bases des commandes. M'expliquez le truc des $1, $2... du echo et tout parce que je nage
Merci
Message édité par NaSr1 le 11-10-2007 à 19:04:37
| NaSr1 a écrit : Mais notre prof est super bidon, donc je n'ai rien compris et je ne suis pas le seul |
on a tous du dire ca un jour, meme si c'était 99% par manque d'attention ![]()
| NaSr1 a écrit :
|
tu peux commencer par là:
http://www.trustonme.net/didactels/148.html
Message édité par coca25 le 04-10-2007 à 11:14:55
Penser à voir les tutos, ca peut aider!
Répondre à coca25
oui, tu peux commencer par cherche par toi meme.
si tu te lances dans l'info, y'aura rarement quelqu'un derrière toi pour t'expliquer les choses.
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
| Vinz42 a écrit :
|
Si ... toujours la même personne pour moi: mon patron.. En m'expliquant qu'il me l'a demandée il y a DEJA 10 minutes, que ca prend pas plus de 5 minutes selon lui, et qu'il commence a trouver le temps long donc que je dois me grouiller 1 peu ...
| elendilm a écrit : Si ... toujours la même personne pour moi: mon patron.. En m'expliquant qu'il me l'a demandée il y a DEJA 10 minutes, que ca prend pas plus de 5 minutes selon lui, et qu'il commence a trouver le temps long donc que je dois me grouiller 1 peu ... |
nan, ton patron, il est pas là pour t'expliquer comment ça marche, il est là pour te faire magner le cul sur des choses que tu es censé connaitre.
déforme pas ce que je dis, merci.
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
Merci pour le lien
Voila j'ai fait le 5, mais il me dit error syntax ligne 15
#!/bin/bash
if [ $# -ne 1 ]
then
echo " Veuillez entrer un nom de repertoire."
exit 1
fi
cd .
mkdir $1
cd $1
mkdir rep07-08
if [ $? = 0 ]
then
echo "Création réussie"
else
echo "Création refusée"
fi
Je cherche pour le 6
Message édité par NaSr1 le 04-10-2007 à 18:52:09
| Vinz42 a écrit : nan, ton patron, il est pas là pour t'expliquer comment ça marche, il est là pour te faire magner le cul sur des choses que tu es censé connaitre. déforme pas ce que je dis, merci. |
Rooooo .. le tendu du calecon !!!
Arrives tu à detecter la boutade ?
| Citation : des choses que tu es censé connaitre |
: la où c'est tendu, c'est quand tu bosse sur un progiciel AS400 que tu ne connais pas, dans un systeme que tu ne maitrise pas, comprenant une 100aine de bibliotheque et environ 5000 tables ...
Allez ... Zen !
Donc, pour répondre à la question:
cd . ca sert à rien ca, t'est déjà la ou tu le demande ![]()
Tu ne teste pas par contre que le repertoire est accessible en écriture. D'ailleurs: en écriture pour qui ?? pour owner , group ou others ?
Pour tester ça, je verrai bien 1 petit
a=`ls -d -all "nom_rep" | cut -c3-3`
if [ "$a" = "w" ]
then
t'as les droits.
else
t'as pas les droits.
fi
Pour la taille des fichiers:
taill1=`du -b fichier1 | cut -c1-8`
taill2=`du -b fichier2 | cut -c1-8`
if [ taill1 -gt taill2 ]
[...]
Heuuu et si ils font la même taille ???
Message édité par elendilm le 04-10-2007 à 19:43:11
@NaSr1: ton programme ne contient pas d'erreur
par contre, tu ne serais pas en train de le tester sous windows?
Penser à voir les tutos, ca peut aider!
Répondre à coca25
@coca25 : ba si, parce que en cours on est sous linux mais chez moi je suis sur windows . Et en faite je me connecte a mon serveur IUT depuis chez moi. Donc en faite j'ecris mon programme sous TexPad chez moi, je l'envoye sur le serveur avec WinSCP , je le connecte avec putty , une page Xterm apparait et là j'exécute mais fichiers.
@elendilm : pourquoi me met tu une commande pour la taille des fichiers ?! L'exo ne le demande pas ...
Bon sinon l'exo 6 si vous auriez des petits indices pour m'aidez parce qu'il est bien chaud...pour mon niveau ^^
bon alors, une fois connecté à la machine linux, execute un:
dos2unix nom_du_script |
et ca devrait marcher.
l'erreur provient d'un problème de retour de ligne, le shell pense que c'est une seule ligne!
pour ce qui est du 6:
pour les permissions, tu devrais voir du coté de la commande "test" et ca tombe bien, son utilisation est expliqué dans le lien que je t'ai passé (recherche test dans la page)
pour la taille d'un fichier, tu peux utiliser la commande:
stat -c %s nom_du_fichier |
pour récupérer la sortie d'une commande dans une variable:
taille1=$(stat -c %s nom_du_fichier) |
tu auras la taille dans $taille1
Message édité par coca25 le 05-10-2007 à 12:48:26
Penser à voir les tutos, ca peut aider!
Répondre à coca25
| NaSr1 a écrit :
|
Je sais pas moi , peut être pour ça:
| Citation : Si le fichier existe dans ce répertoire, conserver celui qui a la plus grande taille en octets |
@coca25 : merci pour les aides du 6, je vais voir çà cette après-midi . Mais quel problème ? J'arrive très bien a éxécuter mes programmes de chez moi et j'ai vérifié hier il marche bien sous linux .
@elendilm : ah désolé, j'avais pas lu l'exo 6 encore ^^ . J'étais à fond dans le 5...donc là je comprend mieux, donc merci
| NaSr1 a écrit : Mais quel problème ? J'arrive très bien a éxécuter mes programmes de chez moi et j'ai vérifié hier il marche bien sous linux .
|
faudrait savoir quand même !
| NaSr1 a écrit :
|
Penser à voir les tutos, ca peut aider!
Répondre à coca25
ah oui désolé, j'ai tellement édité ce post que certains bout de phrases ont été oublié . Donc le 5 c'est bon, il marche très bien .
Désolé encore .
Je commence le 6, je vais le faire avec vos commandes, je vous mettrait mon programme, juste après
éditer n'est pas forcément une bonne idée à chaque fois, ca empêche de comprendre si on fait pas partie de la discussion!
Penser à voir les tutos, ca peut aider!
Répondre à coca25
ok.
Euh une question comment fait ton pour mettre plusieurs informations dans un if ? Comme çà c'est bon ?? :
if [ $1 -d && $1 -w ]
Et une deuxieme , pour le contraire faut mettre quoi et comment et ou, enfin tout en faite ^^
plusieurs conditions:
Code :
|
contraire:
Code :
|
Penser à voir les tutos, ca peut aider!
Répondre à coca25
D'accord je te remercie .
euh une question, comment faire pour :
-crée le fichier, ici $2
-copier un fichier dans un répertoire, ici copier $2 dans $1. est ce : cp $2 $1
-comparer la taille d'un fichier avec un autre, nous ne connaissons pas les 2 noms. Ici comparer $2 et le meme nom . J'ai mis $3 mais ca me semble faux.
Voici mon prog, qui ne marche pas ^^ :
#! /bin/bash
if [ $# -ne 2 ]
then
echo " Veuillez entrer le nom du repertoire et ensuite le nom du fichier."
exit 2
fi
if [[ -d $1 && -w $1 ]]
then
echo "Le répertoire existe et est en ecriture"
if [ -a $2 ]
then
if [ $2 < $3 ]
then
rm "$3"
else
rm "$3"
fi
else
echo "Votre fichier n'existe pas"
cp $2>/systeme/tp3/$1
echo "Votre fichier a été placer dans $1"
fi
else
echo "Soit vous n'avez pas le droit soit votre répertoire saisi n'existe pas"
fi
Message édité par NaSr1 le 06-10-2007 à 16:57:01
| NaSr1 a écrit : euh une question, comment faire pour : |
t'as pas à le créer, il est censé exister vu que tu dois comparer sa taille à un autre!
| NaSr1 a écrit :
|
si tu cherchais un peu, non?
http://www.trustonme.net/didactels/130.html
ou sinon
man cp |
| NaSr1 a écrit :
|
relis l'énoncé, on te donne un fichier et un repertoire, et il te faut vérifier si le fichier existe déjà dans le répertoire! donc c'est le même nom, mais pas le même emplacement.
ex:
/tmp/fichier1
/tmp/rep/fichier1
| NaSr1 a écrit :
|
ca sert à quoi ca?
"<" n'est pas pour "inférieur", il faut utiliser "-lt"
http://www.linux-kheops.com/doc/ma [...] est.1.html
tu ne prends nulle part la taille des fichiers.
| NaSr1 a écrit :
|
voir plus haut
Message édité par coca25 le 06-10-2007 à 17:07:28
Penser à voir les tutos, ca peut aider!
Répondre à coca25
merci, et je cherche depuis 14h
Mais je n'ai fait que 5h de systeme dans ma vie, donc je ne connait presque rien et je ne sais rien utilisé. Mon prof explique pas . Genre -lt je connaissais pas . Merci quand meme
Voila j'ai fait çà mais ca ne marche pas . Ensuite l'énoncé est vraiment très mal écrit, et manque de précisions !
#! /bin/bash
if [ $# -ne 2 ]
then
echo " Veuillez entrer le nom du repertoire et ensuite le nom du fichier."
exit 2
fi
if [[ -d $1 && -w $1 ]]
then
echo "Le répertoire existe et est en ecriture"
if [[ -a $2 && -f $2 ]]
then
echo "Votre fichier existe déja dans ce repertoire"
echo "Comparaison en cours..."
if [ $2 -lt $3 ]
then
rm "$2"
else
rm "$3"
fi
else
echo "Votre fichier n'existe pas dans ce répertoire"
cp $2/chemin/vers/$1
echo "Votre fichier a été placer dans $1"
fi
else
echo "Soit vous n'avez pas le droit soit votre répertoire saisi n'existe pas"
fi
EDIT : j'ai copier/coller
Message édité par NaSr1 le 07-10-2007 à 16:26:11
copie coller, c'est bcp mieux.
revois la notion de variable:
$1, $2 etc... sont les arguments de la ligne de commande. t'en a 3??
si tu considères que $2 est le nom de fichier, en reflechissant logiquement, tu penses que ca peut faire quoi [ $2 -lt $3 ] ?
cp $2/chemin/vers/$1 |
tu penses vraiment que c'est une commande valide ca?
if .. then .. else => si .. faire .. sinon
alors je vois pas l'interet de mettre exactement la meme instruction dans le "if" et le "else"!
as tu déjà programmé avec un autre langage?
Penser à voir les tutos, ca peut aider!
Répondre à coca25
ba en ce moment je programme en java, et un peu C et un peu d'assembleur . Mais comme tu peux voir je suis qu'en début de mon IU info. Ca fait que 3 semaines que je suis en cours.
Pour les variables je suis, je comprend tout a fait la ocnnerie que j'ai ecris (le $3) mais je vois trop pas quoi mettre, vu que c'est le meme fichier mais peut etre pas la meme taille .
Pour le -lt, ba j'ai regardé le site que tu m'a passé, mais bon après j'ai pas trouvé d'exemples pour l'appliquer .
PS: je trouve ce langage vraiment merdique, car il faut faire plein de truc pour rien, tout comme l'assembleur.
et tu la récupères où, la taille?
si c'est pour rien, il faut pas les faire!
le "-a", tu l'as eu où?
Message édité par coca25 le 07-10-2007 à 16:45:41
Penser à voir les tutos, ca peut aider!
Répondre à coca25
le -a, ba dans mon cours, c'est pour prouver l'existence d'un fichier.
Je ne sais pas récupérer la taille d'un fichier, donc je ne l'ai pas mis. Il faut le mettre vu qu'il le demande.
ah oui, je regardais le mauvais "man" pour le -a
Code :
|
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Merci, je suis d'accord avec ce que tu as mis, mais par contre tu a faire ecrire copie, ok, mais aucune action pour copier le fichier
(je ne sais pas le faire...)
Sinon quelques questions, quel est la différence entre :
- echo copie
et
- echo "copie"
Et peut tu m'expliquer comment fonctionne, taille=$(stat -c %s $2)
t'abuses pas un peu, non ?
man cp |
pour stat, c'est une commande:
man stat |
le $() sous bash, c'est pour récupérer la sortie d'une commande
Message édité par coca25 le 07-10-2007 à 18:50:05
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Voici la correction :
Code :
|
Je te remercie énormément de ton aide
J'ai beaucoup apris en un wek end
Message édité par NaSr1 le 11-10-2007 à 19:02:54
Il y a 677 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
