Help, controle UNIX - Programmation
Marsh Posté le 23-01-2001 à 14:18:27
pas d'option -w pour le ls chez SUN.
Pour la signification ça veut dire que
ls -w ça ne marche pas => renvoie un message d'erreur (2) => faux
whoami marche => renvoie la valeur 0 => vrai
date marche => renvoie 0.
donc dans
1) (faux ou vrai) et vrai => vrai
2) (faux et vrai) ou vrai => vrai
Dans tous les cas la valeur booléenne de ton expression c'est vrai.
Si c'est pas ça ce que tu veux, va falloir être plus précise cher CeCe.
Marsh Posté le 23-01-2001 à 14:22:06
Flagrant délit de double topic.
En plus sur BlaBla t'as pas dit que c'était pour un contrôle...
Marsh Posté le 23-01-2001 à 14:22:54
oui c'est ca merci...
une autre question
supposons que ds votre repertoir courant il y ass
_ des fichiers scripts et donnees en texte
_ des fichiers binaires
_ des sous repertoires
creer un script qui affiche le contenu de tous les fichiers avec une ligne entête indiquand le nom du fichier
pour les fichiers non texte ne pas afficher leurs contenus mais signaler par une ligne:
fichier (indiquer le nom): repertoire ou non-texte suivant le cas
Marsh Posté le 23-01-2001 à 14:55:29
Toxin a écrit a écrit : J'ai trouvé, je rédige. |
arf!
file est ton ami
Marsh Posté le 23-01-2001 à 14:59:03
Da file ist good.
Mais j'ai des problèmes avec la comparaison.
Marsh Posté le 23-01-2001 à 15:02:48
Pour la première question, comme le dit Toxin, y a pas d'option -w dans le ls POSIX (mais elle existe sous GNU-bash).
Bon restons POSIX.
(ls -w || whoami) && date va donc être évaluée et retourner sur la sortie standard le nom de l'utilisateur et la date.
Par contre (ls -w && whoami) || date ne va retourner que la date parce que les opérateur doublés && et || n'évaluent le second membre que si le premier ne permet pas d'avoir le résultat.
Ainsi exp1 && exp2 n'évaluera pas exp2 si exp1 est faux
et exp1 || exp2 n'évaluera pas exp2 si exp1 est vrai.
--Message édité par Verdoux--
Marsh Posté le 23-01-2001 à 15:12:02
Voilà ce que j'ai eu en testant les commandes :
ma_machine# {nom_user} /tmp > (ls -w ||whoami) && date
ls: illegal option -- w
usage: ls [-1ACFLNRabcdefgilmnopqrstux] [File...]
nom_user
Tue Jan 23 14:54:02 NFT 2001
ma_machine# {nom_user} /tmp > (ls -w && whoami) ||datess
ls: illegal option -- w
usage: ls [-1ACFLNRabcdefgilmnopqrstux] [File...]
Tue Jan 23 14:54:24 NFT 200
Histoire d'illustrer les propos de Verdoux.
Et qu'on arrête de dire que je fais de la mauvaise volonté!!!
Marsh Posté le 23-01-2001 à 15:18:20
merci les gars!
une autre question:
creer la commande "monchoix" qui affiche les lignes suivantes:ss
Menu du (indiquer la date)ss
1: liste des fichiers de votre repertoire de depart (le home) avec les detailsss
2: liste des utilisateurs connectes a la machine tries suivant leurs nomsss
3: liste des variables d'environnementss
de sorte que qd on lance "choix 1 " "choix 2" ou "choix3" on a les listes indiquesss
prevoir le cas ou on lance "choix" sans arguments, afficher le message "lancer choix avec arguments 1,2 ou 3"
Marsh Posté le 23-01-2001 à 15:36:15
Il y a un pb de syntaxe avec les opérateurs de comparaison et je me souviens plus comment on fait.
Attention ' est le back-quote
#!/bin/ksh
liste='ls'
for i in $liste
do
res='file $i'
echo $res | grep text | wc -l | read btext
echo $res | grep bit | wc -l | read bbin
echo $res | grep directory | wc -l | read bdir
echo $res | grep script | wc -l | read bscript
if [ $btext -eq 1 -o $bscript -eq 1 ]
then echo "Contenu de $i"
cat $i
echo
else if [ $bbin -eq 1 ]
then echo "$i : binaire"
else if [ $bdir -eq 1 ]
then echo "$i : repertoire"
else echo "autre"
fi
fi
fi
done
Une Connerie corrigé
Deux Conneries corrigées. Ca a l'air de marcher maintenant
--Message édité par Toxin--
Marsh Posté le 23-01-2001 à 15:40:55
CeCe peux tu me donner le nom de tes professeurs UNIX. Par mail si tu veux pour pas les divulguer ici. Ca sent le vécu c'est pour ça.
Marsh Posté le 23-01-2001 à 15:42:00
choix.ksh:
#!/bin/ksh
NBPARAM=$#
if [ "$NBPARAM" != 1 ]
then
echo "lancer choix avec arguments 1,2 ou 3"
else
case "$1" in
"1" )
ls -l $HOME
;;
"2" )
who | sort
;;
"3" )
env;;
esac
fi
monchoix.ksh:
#!/bin/ksh
echo "Menu du `date`"
echo "1: liste des fichiers de votre repertoire de depart (le home) avec les details " echo "2: liste des utilisateurs connectes a la machine tries suivant leurs noms "
echo "3: liste des variables d'environnement"
--Message édité par jupiler--
Marsh Posté le 23-01-2001 à 15:45:54
J'ai regardé les options de la commande who, et pareil, je vois pas comment trier non plus.
Dis-moi, par hasard il ne manque pas un cat temp.txt ou more temp.txt???
Marsh Posté le 23-01-2001 à 15:47:20
Fred999 a écrit a écrit : J'ai regardé les options de la commande who, et pareil, je vois pas comment trier non plus. Dis-moi, par hasard il ne manque pas un cat temp.txt ou more temp.txt??? |
j'ai changé mon message, suffit de faire who | sort
sinon sort sur le fichier ca marche aussi mais c'est plus nécessaire ici
Marsh Posté le 23-01-2001 à 16:00:16
testes "who | sort" tu verras bien
ta méthode ne fait que restreindre l'affichage au nom du connecté, mais le awk est inutile puisque le sort utilise le premier champ de la ligne donc le nom
--Message édité par jupiler--
Marsh Posté le 23-01-2001 à 16:02:52
merci merci
autre question:ss
supposons que dansssvotre repertoire courant il y ass
_des fichiers scripts et donnees en textess
_ des fichiers binairesss
_ des sous repertoiresss
creez un script qui affiche le contenu de tous les fichiers avec une ligne entête indiquand le nom du fichier. Pour les fichiers non texte ne pas afficher leurs contenus mais signaler par une ligness
ss fichier (indiquer le nom): repertoire ou non texte suivant le casss
oups!!!ssdur dur
Marsh Posté le 23-01-2001 à 16:03:37
Vi mais on ne voit QUE les noms des utilisateurs UNIX, pas le reste. On n'a pas demandé la liste des tty dans l'énoncé.
Par contre comment on fait un group des lignes ????
Marsh Posté le 23-01-2001 à 16:04:46
CeCe a écrit a écrit : merci merci autre question: supposons que dans votre repertoire courant il y a _des fichiers scripts et donnees en texte _ des fichiers binaires _ des sous repertoires creez un script qui affiche le contenu de tous les fichiers avec une ligne entête indiquand le nom du fichier. Pour les fichiers non texte ne pas afficher leurs contenus mais signaler par une ligne fichier (indiquer le nom): repertoire ou non texte suivant le cas oups!!! dur dur |
Relis tout le topic, CeCe
Marsh Posté le 23-01-2001 à 16:07:36
Toxin a écrit a écrit : Vi mais on ne voit QUE les noms des utilisateurs UNIX, pas le reste. On n'a pas demandé la liste des tty dans l'énoncé. Par contre comment on fait un group des lignes ???? |
tu veux dire, pour éliminer les doublons??
Marsh Posté le 23-01-2001 à 16:11:33
Toxin a écrit a écrit : Vi. En awk je sais faire mais pas sur une seule ligne. |
dans ce cas-la ta ligne est bien mais tu rajoutes -u
who | awk '{ print $1 }' | sort -u
Marsh Posté le 23-01-2001 à 16:19:35
Mais il est 16h passé et j'ai été absent pendant plus d'une demi-heure pour papoter avec un directeur de projet.
Ca n'a pas dû aider CeCe.
--Message édité par Toxin--
Marsh Posté le 23-01-2001 à 16:20:38
derniere question, et apres, vous avez droit a une sucette!!!
copier le fichier/etc/passwd chez vous
afficher dans l'ordre alphabetique tous les noms utilisateurs avec leurs shells, pas d'autres informations superflues
Marsh Posté le 23-01-2001 à 16:29:13
et tu sais y repondre?
j'ai le debut, mais j'ai du mal pour la liste...
jupiler a écrit a écrit : putain, c'est un control sur l'utilisation du man |
Marsh Posté le 23-01-2001 à 16:30:00
-- Voilà voilà, ça arrive --
#!/bin/ksh
cat /etc/passwd | awk '
BEGIN
{
FS=":"
}
{
ligne[$0]=sprintf("%s %s",$1, $7)
}
END
{
for (i in ligne)
ss printf("%s
", ligne[i])
} ' | sort
Marsh Posté le 23-01-2001 à 16:32:51
pas mieux
pour éviter les doublons rajouter -u après le sort
Marsh Posté le 23-01-2001 à 16:38:26
cat /etc/hosts | cut -f1,7 -d":" | sort
Mais il y a un ":" qui reste. Tu peux rajouter
| sed s/[:]/ /g
Pour le virer
Marsh Posté le 23-01-2001 à 16:39:24
cela dit, ya moyen de faire plus simple au niveau du code,
genre avec une seule ligne:
awk -F: '{print $1 "ss" $7}' /etc/passwd | sort -u
Marsh Posté le 23-01-2001 à 16:43:07
Vi euh.... c'est mieux c'est sûr
Comme je n'utilise jamais awk tout seul sur la ligne de commande, je connaissais pas -F
Marsh Posté le 23-01-2001 à 14:07:53
bon j'ai un controle, si quelqu'un peut m'aider c'est cool!!
j'ai jusqu'a 16h maxi...
(ls -w ||whoami) && date
(ls -w && whoami) ||date
ca veut dire quoi?
merci