Pages : 1
#1 Le 11/11/2012, à 12:00
- touttou
[Résolu] Shell script
bonjour tout le monde,
je suis débutante en linux et j'ai un exercice Shell que j'ai essayé mais ça m'a pas marché
énoncé : écrire un script shell qui fait appel à une fonction fnCompress qui compresse (gzip) un fichier passé en paramètre,s'il existe et s'il ne l'ai pas déjà .
le code que j'ai écrit:
#! /bin/shell
function fnCompress()
{if [ -e $1 -a $1 != *.gz];
then
gzip $1
fi }
fnCompress $1;
merci d'avance
Dernière modification par touttou (Le 11/11/2012, à 21:26)
Hors ligne
#2 Le 11/11/2012, à 14:16
- Bousky
Re : [Résolu] Shell script
Quelques remarques d'ordre général :
Pour poster du code (ou des retours de terminal, des fichiers,… ), utilise la balise « code » (
au dessus de la zone de saisie).
Si tu veux de l'aide pour faire marcher du code, la moindre des choses est de nous indiquer l'erreur renvoyée.
Sur ton code à proprement parler :
« /bin/shell » n'existe pas. Il faut choisir le shell que tu veux utiliser. Le langage peut-être très proche ou totalement différent de l'un à l'autre :
/bin/sh → standard mais un peu limité ;
/bin/bash → presque standard, une extension de sh ;
/bin/dash → pas standard, une autre extension de sh ;
ksh, csh, tcsh, …
Je te conseille sh ou bash.
« { » doit-être sur la même ligne que le nom de la fonction.
« } » doit être sur une ligne à part (ou précédé d'un point-virgule).
« ] » doit être précédé d'un espace. De manière générale, il faut faire très attention aux espaces dans « [ … ] ».
Il faut toujours mettre des guillemets doubles autour des variables. Dire qu'un script ne supporte pas les noms de fichiers avec des espaces car on a eu la flemme de mettre des guillemets devrait être passible de la peine capitale.
« $1 != *.gz » (« "$1" != *.gz » en tenant compte de la remarque précédente) veut dire « $1 est différent de la liste des fichiers .gz du dossier courant ». C'est-à-dire que si tu as deux fichiers « a.gz » et « b.gz », ton test est équivalent à « $1 != a.gz b.gz ». Ce n'est pas ce que tu veux et tu aurais une erreur car $1 sera comparé à a.gz et il ne saura pas quoi faire de b.gz. Il faut soit :
Utiliser les regex (uniquement avec bash) : « [[ "$1" =~ \.gz$ ]] » ;
Extraire l'extension et la tester : « [ "${1##*.}" = gz ] »
Dernière modification par Bousky (Le 11/11/2012, à 14:19)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#3 Le 11/11/2012, à 20:57
- Postmortem
Re : [Résolu] Shell script
Salut,
Il faut soit :
Utiliser les regex (uniquement avec bash) : « [[ "$1" =~ \.gz$ ]] » ;
Extraire l'extension et la tester : « [ "${1##*.}" = gz ] »
Ou utiliser les doubles crochets en bash (le développement des chemins ne se fait pas entre les double-crochets, ni le découpage en mots) :
[[ "$1" != *.gz ]]
Et ici, que la valeur de $1 contienne ou pas une espace, les double-quotes ne sont pas obligatoires.
Edit :
Le if serait donc ainsi en bash :
if [[ -e $1 && $1 != *.gz ]]
Dernière modification par Postmortem (Le 11/11/2012, à 22:00)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#4 Le 11/11/2012, à 21:26
- touttou
Re : [Résolu] Shell script
Merci à vous deux
Hors ligne
Pages : 1