Aide script unix
salut à tous !
voila, je révise mes partiels et il se trouve que je ne connais vraiment pas les scripts unix ... si quelqu'un pouvait répondre à ces question ca serai super !
les voicis :
1 - Ecrire un script qui vérifie l'existance dans le répertoire courant du fichier dont le nom est passé en paramètre
2 - Ecrire un script qui vérifie que le nom passé en paramètre est un fichier ou un répertoire
3 - Ecrire un script qui qui concatène puis trie deux fichiers file1 et file2 dans un nouveau fichier file3 et affiche le nombre total de lignes. (les noms des trois fichiers doivent être passés en paramètre)
4 - Ecrire un script formé de deux fonctions. la fonction "somme" qui calcul la somme des nombres saisis au clavier et la fonction affiche qui affiche le résultat à l'écran
5 - modifier le script précédent ("4") pour demander à l'utilisateur de saisir au clavier le (ou les) noms de fichiers qu'il aurait oublié d'indiquer en lancant le script.
6 - Ecrire un script de shell qui permet de traiter un répertoire en transformant les noms des fichiers du majuscules aux minuscules
7 - modifier le script précédent ("6") pour pouvoir traiter le cas ou l'argument est un fichier
8 - corriger le script précédent ("7") pour tenir compte des fichiers qui peuvent porter le même nom ou l'utilisateur passe plus d'un argument
9 - Améliorer le script précédent en lui ajoutant une option -m pour les minuscules et -M pour les majuscules
voila, merci d'avance aux personnes qui connaitraient les réponses (et m'aideraient réellement pour mon partiel !
bne journée à tous
voila, je révise mes partiels et il se trouve que je ne connais vraiment pas les scripts unix ... si quelqu'un pouvait répondre à ces question ca serai super !
les voicis :
1 - Ecrire un script qui vérifie l'existance dans le répertoire courant du fichier dont le nom est passé en paramètre
2 - Ecrire un script qui vérifie que le nom passé en paramètre est un fichier ou un répertoire
3 - Ecrire un script qui qui concatène puis trie deux fichiers file1 et file2 dans un nouveau fichier file3 et affiche le nombre total de lignes. (les noms des trois fichiers doivent être passés en paramètre)
4 - Ecrire un script formé de deux fonctions. la fonction "somme" qui calcul la somme des nombres saisis au clavier et la fonction affiche qui affiche le résultat à l'écran
5 - modifier le script précédent ("4") pour demander à l'utilisateur de saisir au clavier le (ou les) noms de fichiers qu'il aurait oublié d'indiquer en lancant le script.
6 - Ecrire un script de shell qui permet de traiter un répertoire en transformant les noms des fichiers du majuscules aux minuscules
7 - modifier le script précédent ("6") pour pouvoir traiter le cas ou l'argument est un fichier
8 - corriger le script précédent ("7") pour tenir compte des fichiers qui peuvent porter le même nom ou l'utilisateur passe plus d'un argument
9 - Améliorer le script précédent en lui ajoutant une option -m pour les minuscules et -M pour les majuscules
voila, merci d'avance aux personnes qui connaitraient les réponses (et m'aideraient réellement pour mon partiel !
bne journée à tous
A voir également:
- Aide script unix
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
- Fichier executable unix ✓ - Forum MacOS
4 réponses
Vu ton nombre de message postés, je pense que tu sais très bien qu'a priori CCM ne sous-traite pas les exercices des étudiants.
De toutes façons le fait de te donner les réponses ne t'aidera pas à réviser puisqu'on te posera en partiel d'autres questions. Il serait à mon avis plus sage de lire un tutoriel sur le shell et de retenir la syntaxe.
http://www.laboiteaprog.com/article-70-3-bash_introduction
http://doc.ubuntu-fr.org/tutoriel/script_shell
Bonne chance
De toutes façons le fait de te donner les réponses ne t'aidera pas à réviser puisqu'on te posera en partiel d'autres questions. Il serait à mon avis plus sage de lire un tutoriel sur le shell et de retenir la syntaxe.
http://www.laboiteaprog.com/article-70-3-bash_introduction
http://doc.ubuntu-fr.org/tutoriel/script_shell
Bonne chance
Oui pas de soucis. Effectivement ça se fait assez vite mais à mon avis il faut un peu plus de 10min.
Et surtout le fait de le faire par toi-même sera plus intéressant intellectuellement parlant et t'évitera de bloquer le jour du partiel (tu verras que le shell est un langage pour lequel il y a plein de petits pièges, la seule manière d'en avoir conscience est de les avoir vécus.)
Pour la question 6, tu peux récupérer les noms de répertoires avec la commande find et les bons arguments. Avec la commande tr, tu peux changer la casse.
Étant donné que tu débutes en shell et que tu ne peux pas connaître toutes les fonctions qui existent (ceci dit n'oublie pas que ça se retrouve avec le man, celui-ci suggère souvent des commandes shells connexes entre elles), je vais te dire ce dont tu as besoin pour chaque question :
1 - Ecrire un script qui vérifie l'existence dans le répertoire courant du fichier dont le nom est passé en paramètre
Pour récupérer un paramètre dans un script shell les variables importantes sont :
$0, $1, $2, ....
$#
$@
Je te laisse regarder avec un echo ce qu'elles contiennent. Ensuite il suffit d'utiliser un if avec le bon test. En bash il y a plein de tests sur les chaînes, les valeurs numériques, les fichiers etc...
2 - Ecrire un script qui vérifie que le nom passé en paramètre est un fichier ou un répertoire
Idem
3 - Ecrire un script qui qui concatène puis trie deux fichiers file1 et file2 dans un nouveau fichier file3 et affiche le nombre total de lignes. (les noms des trois fichiers doivent être passés en paramètre)
Tu auras besoin de cat et de wc en plus des notions vues dans 1 et 2.
4 - Ecrire un script formé de deux fonctions. la fonction "somme" qui calcule la somme des nombres saisis au clavier et la fonction affiche qui affiche le résultat à l'écran
En utilisant read et ceci ça devrait rouler :
http://www.trustonme.net
5 - modifier le script précédent ("4") pour demander à l'utilisateur de saisir au clavier le (ou les) noms de fichiers qu'il aurait oublié d'indiquer en lancant le script.
Le 4 ?
6 - Ecrire un script de shell qui permet de traiter un répertoire en transformant les noms des fichiers du majuscules aux minuscules
Tu auras besoin de tr et de find.
7 - modifier le script précédent ("6") pour pouvoir traiter le cas ou l'argument est un fichier
https://forums.commentcamarche.net/forum/affich-37620017-comment-lire-un-fichier-ligne-par-ligne
8 - corriger le script précédent ("7") pour tenir compte des fichiers qui peuvent porter le même nom ou l'utilisateur passe plus d'un argument
Bon là je ne vois pas trop comment faire ça dans l'élégance. Ce que je te propose : tu itères sur $@ pour générer une chaîne (appelons la args) ou chaque argument de $@ est séparé par un \n (retour à la ligne). Ensuite avec un "echo args | uniq" tu peux virer les doublons.
Attention aux chemins avec des noms de fichiers comportant des espace il faut être TRÈS prudent. Tu auras sans doute besoin de la commande eval.
9 - Améliorer le script précédent en lui ajoutant une option -m pour les minuscules et -M pour les majuscules
Un simple if pour paramétrer l'appel de tr et c'est dans la poche. Concrètement cela consiste à générer la commande tr à appeler dans une chaîne de caractère. Une fois la chaîne générée, on l'évalue en tant que commande shell grâce à eval.
Dans tes révisions, essaye de bien comprendre comment faire des pipes (pardon) c'est sans doute l'une des notions les plus importantes. Il faut pour cela avoir bien compris ce qu'était une redirection au préalable (opérateurs <, 1>, 1>>, 2>, 2>>), car au final, un pipe n'est qu'une redirection de ce qui aurait du être écrit dans /dev/stdout vers un processus (qui au lieu de lire /dev/stdin lit ce flux teste redirigé).
Bonne chance pour tes révisions ;-)
Et surtout le fait de le faire par toi-même sera plus intéressant intellectuellement parlant et t'évitera de bloquer le jour du partiel (tu verras que le shell est un langage pour lequel il y a plein de petits pièges, la seule manière d'en avoir conscience est de les avoir vécus.)
Pour la question 6, tu peux récupérer les noms de répertoires avec la commande find et les bons arguments. Avec la commande tr, tu peux changer la casse.
Étant donné que tu débutes en shell et que tu ne peux pas connaître toutes les fonctions qui existent (ceci dit n'oublie pas que ça se retrouve avec le man, celui-ci suggère souvent des commandes shells connexes entre elles), je vais te dire ce dont tu as besoin pour chaque question :
1 - Ecrire un script qui vérifie l'existence dans le répertoire courant du fichier dont le nom est passé en paramètre
Pour récupérer un paramètre dans un script shell les variables importantes sont :
$0, $1, $2, ....
$#
$@
Je te laisse regarder avec un echo ce qu'elles contiennent. Ensuite il suffit d'utiliser un if avec le bon test. En bash il y a plein de tests sur les chaînes, les valeurs numériques, les fichiers etc...
2 - Ecrire un script qui vérifie que le nom passé en paramètre est un fichier ou un répertoire
Idem
3 - Ecrire un script qui qui concatène puis trie deux fichiers file1 et file2 dans un nouveau fichier file3 et affiche le nombre total de lignes. (les noms des trois fichiers doivent être passés en paramètre)
Tu auras besoin de cat et de wc en plus des notions vues dans 1 et 2.
4 - Ecrire un script formé de deux fonctions. la fonction "somme" qui calcule la somme des nombres saisis au clavier et la fonction affiche qui affiche le résultat à l'écran
En utilisant read et ceci ça devrait rouler :
http://www.trustonme.net
5 - modifier le script précédent ("4") pour demander à l'utilisateur de saisir au clavier le (ou les) noms de fichiers qu'il aurait oublié d'indiquer en lancant le script.
Le 4 ?
6 - Ecrire un script de shell qui permet de traiter un répertoire en transformant les noms des fichiers du majuscules aux minuscules
Tu auras besoin de tr et de find.
7 - modifier le script précédent ("6") pour pouvoir traiter le cas ou l'argument est un fichier
https://forums.commentcamarche.net/forum/affich-37620017-comment-lire-un-fichier-ligne-par-ligne
8 - corriger le script précédent ("7") pour tenir compte des fichiers qui peuvent porter le même nom ou l'utilisateur passe plus d'un argument
Bon là je ne vois pas trop comment faire ça dans l'élégance. Ce que je te propose : tu itères sur $@ pour générer une chaîne (appelons la args) ou chaque argument de $@ est séparé par un \n (retour à la ligne). Ensuite avec un "echo args | uniq" tu peux virer les doublons.
Attention aux chemins avec des noms de fichiers comportant des espace il faut être TRÈS prudent. Tu auras sans doute besoin de la commande eval.
9 - Améliorer le script précédent en lui ajoutant une option -m pour les minuscules et -M pour les majuscules
Un simple if pour paramétrer l'appel de tr et c'est dans la poche. Concrètement cela consiste à générer la commande tr à appeler dans une chaîne de caractère. Une fois la chaîne générée, on l'évalue en tant que commande shell grâce à eval.
Dans tes révisions, essaye de bien comprendre comment faire des pipes (pardon) c'est sans doute l'une des notions les plus importantes. Il faut pour cela avoir bien compris ce qu'était une redirection au préalable (opérateurs <, 1>, 1>>, 2>, 2>>), car au final, un pipe n'est qu'une redirection de ce qui aurait du être écrit dans /dev/stdout vers un processus (qui au lieu de lire /dev/stdin lit ce flux teste redirigé).
Bonne chance pour tes révisions ;-)
ou je le sais, mais ce n'est pas un devoir maison ^^ (et je me suis dit qu'un mec callé en script unix en aurait pour 10 min max =D )
je regarde tes liens, ca a l'air bien expliqué, mais si quelqu'un pouvait juste me donner la réponse du 6 ( j'ai vraiment du mal a comprendre les shell) ca serai cool.
je regarde tes tuto, j'essaye de faire l'exo, et je poste mes réponses. Pourras tu regarder et corriger si besoins?
merci
je regarde tes liens, ca a l'air bien expliqué, mais si quelqu'un pouvait juste me donner la réponse du 6 ( j'ai vraiment du mal a comprendre les shell) ca serai cool.
je regarde tes tuto, j'essaye de faire l'exo, et je poste mes réponses. Pourras tu regarder et corriger si besoins?
merci
Il faut itérer sur le résultat de find avec une boucle for.
voila donc les shell que j'ai fais :
je ne vois donc pas ce que je dois faire pour la 5 et la 8. le reste est-il bon?
merci beaucoup !
6 -
Trouver TousFichier()
{
$NomFichier
$NouveauNom
for $NomFichier in $1 ; do #$1 est le répertoire
$NouveauNom ='echo $ NomFichier | tr 'A-Z' 'a-z''
mv $NomFichier $NouveauNom
done
}
7 -
Trouver TousFichier()
{
$NomFichier
$NouveauNom
if [ ! -f $1 ] ; then
{
echo « vous avez passé un fichier et non un répertoire en paramètre »
}
Else
{
for $NomFichier in $1 ; do #$1 est le répertoire
$NouveauNom ='echo $ NomFichier | tr 'A-Z' 'a-z''
mv $NomFichier $NouveauNom
done
}
fi
}
8 -
9 -
Trouver TousFichier() #$1 nomrépertoire, $2 : -m ou -M
{
$NomFichier
$NouveauNom
if [ ! -f $1 ] ; then
{
echo « vous avez passé un fichier et non un répertoire en paramètre »
}
Else
{
If[$2 == 'm'] ; then
{
for $NomFichier in $1 ; do #$1 est le répertoire
$NouveauNom ='echo $ NomFichier | tr 'A-Z' 'a-z''
mv $NomFichier $NouveauNom
done
}
Else if[$2 = 'M'] ; then
{
for $NomFichier in $1 ; do #$1 est le répertoire
$NouveauNom ='echo $ NomFichier | tr 'a-z' 'A-Z''
mv $NomFichier $NouveauNom
done
}
Else{
Echo 'option non reconnue'
}
Fi
fi
}
fi
}
je ne vois donc pas ce que je dois faire pour la 5 et la 8. le reste est-il bon?
merci beaucoup !
Bah déjà les accolades en shell et les mots clé (Else, Fi...) pas en minuscule ça me choque un peu. Je pense que la moindre des choses c'est de tester tes scripts. Si tu es sous windows tu peux installer putty pour te connecter sur un linux ou bien cygwin pour installer un environnement shell sous windows.
Merci de ne donner sur le forum que des scripts qui fonctionnent.
Merci de ne donner sur le forum que des scripts qui fonctionnent.
Ah tiens oui sur doc ubuntu ils ont un peu craqué. Ben général... on n'en met pas, sauf pour les fonctions :-) Ceci dit ça doit sans doute quand même marcher avec les accolades, il faudrait tester.
Pour la correction oui il me le faut, mais seulement quand tu es bloqué (c'est-à-dire quand tu as testé et que tu ne t'en sors pas :p).
Pour la correction oui il me le faut, mais seulement quand tu es bloqué (c'est-à-dire quand tu as testé et que tu ne t'en sors pas :p).