harold50 Posté(e) le 26 août 2008 Partager Posté(e) le 26 août 2008 Bonjour j'ai un script Ksh que je doit convertir en Bash. je voudrais donc savoir la difference entre les deux types de shell merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 26 août 2008 Auteur Partager Posté(e) le 26 août 2008 je veux l'equivalent de ces commandes en bash typeset -Z2 fmonth fday set -a mlength xx Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 26 août 2008 Partager Posté(e) le 26 août 2008 Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 26 août 2008 Partager Posté(e) le 26 août 2008 Mon ami google m'a pointé des pages intéressantes comme http://www.faqs.org/faqs/unix-faq/shell/bash/ (C2) ou http://web.ift.uib.no/~btk/data/shell-100.BetaA.html Et effectivement, ta signature pique les yeux. Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 27 août 2008 Auteur Partager Posté(e) le 27 août 2008 merci pour les url mais ça me sert pas beaucoup voila mon code #! /bin/bash # # get current month and year date '+%Y %m' | read year month month=${month#0} # drop leading zero # # back up one month ((month=month-1)) if ((!month)); then month=12 ((year=year-1)) fi echo $year $month # # compute last day of month leap=0 if ((!(year%100))); then ((!(year%400))) && leap=1 else ((!(year%4))) && leap=1 fi # ja fe ma ap ma jn jl ag se oc no de set -a mlength xx 31 28 31 30 31 30 31 31 30 31 30 31 ((leap)) && mlength[2]=29 last=${mlength[month]} # # loop typeset -Z2 fmonth fday day=1 while ((day<=last)); do fmonth=$month fday=$day h=lic${year}${fmonth}${fday}\*405\*.txt echo $h ((day=day+1)) done exit 0 il faut que je change les lignes mlength et typeset Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 27 août 2008 Partager Posté(e) le 27 août 2008 Qu'est ce que tu as et qu'est ce que tu veux obtenir ? Un lien qui m'a bien servit : http://wooledge.org:8000/BashFAQ Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 27 août 2008 Partager Posté(e) le 27 août 2008 Pourquoi faire soi-même des choses que date fait déjà bien? #!/bin/sh set -e NOW='now' [ "$1" ] && NOW="$1" THISYEAR="$(date -d "$NOW" '+%Y')" THISMONTH="$(date -d "$NOW" '+%m')" LASTDATE="$THISYEAR-$THISMONTH-01 -1 day" LASTYEAR="$(date -d "$LASTDATE" '+%Y')" LASTMONTH="$(date -d "$LASTDATE" '+%m')" LASTDAY="$(date -d "$LASTDATE" '+%d')" for DAY in $(seq -w 1 $LASTDAY) do echo "$LASTYEAR-$LASTMONTH-$DAY" done (on peut s'amuser à changer "now" en mettant un paramètre au script pour tester, par exemple "2008-01-01") Lien vers le commentaire Partager sur d’autres sites More sharing options...
djuke Posté(e) le 28 août 2008 Partager Posté(e) le 28 août 2008 Pourquoi faire soi-même des choses que date fait déjà bien? #!/bin/sh set -e NOW='now' [ "$1" ] && NOW="$1" THISYEAR="$(date -d "$NOW" '+%Y')" THISMONTH="$(date -d "$NOW" '+%m')" LASTDATE="$THISYEAR-$THISMONTH-01 -1 day" LASTYEAR="$(date -d "$LASTDATE" '+%Y')" LASTMONTH="$(date -d "$LASTDATE" '+%m')" LASTDAY="$(date -d "$LASTDATE" '+%d')" for DAY in $(seq -w 1 $LASTDAY) do echo "$LASTYEAR-$LASTMONTH-$DAY" done (on peut s'amuser à changer "now" en mettant un paramètre au script pour tester, par exemple "2008-01-01") Une raison: - absolument pas POSIX, ne tourne que sur GNU/Linux ou peut-être un BSD (seq/date -d/#!/bin/sh alors que la syntaxe $(...) non compatible bourne shell est utilisée). Sinon Harold, il y a une erreur dans ton script ksh: set -a mlength xx 31 28 31 30 31 30 31 31 30 31 30 31 devrait être set -A mlength xx 31 28 31 30 31 30 31 31 30 31 30 31.Il te faut trouver un autre moyen de remplir le tableau mlenght, car set -A ne fonctionne pas en bash. Autre chose, read ne fonctionne pas de la même façon en ksh et en bash. Il faut remplacer: date '+%Y %m' | read year month par year=$(date '+%Y')month=$(date '+%m') Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 28 août 2008 Auteur Partager Posté(e) le 28 août 2008 merci pour votre aide le set -A n'est pas accepté ainsi que le typeset -Z Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 28 août 2008 Partager Posté(e) le 28 août 2008 Une raison: - absolument pas POSIX, ne tourne que sur GNU/Linux ou peut-être un BSD (seq/date -d/#!/bin/sh alors que la syntaxe $(...) non compatible bourne shell est utilisée). D'après l'IEEE Std 1003.1, paragraphe "Command Substitution", $(command) est parfaitement valide (ça marche même dans ksh). De plus, on veut ici convertir de ksh vers bash, donc je ne vois pas vraiment le problème... Lien vers le commentaire Partager sur d’autres sites More sharing options...
djuke Posté(e) le 28 août 2008 Partager Posté(e) le 28 août 2008 Une raison: - absolument pas POSIX, ne tourne que sur GNU/Linux ou peut-être un BSD (seq/date -d/#!/bin/sh alors que la syntaxe $(...) non compatible bourne shell est utilisée). D'après l'IEEE Std 1003.1, paragraphe "Command Substitution", $(command) est parfaitement valide (ça marche même dans ksh). De plus, on veut ici convertir de ksh vers bash, donc je ne vois pas vraiment le problème... C'est posix, mais pas forcément compatible bourne shell, j'ai quelques serveurs ou ça ne fonctionne pas. Ce n'est donc pas portable. Et si c'est du bash, il faut dans l'idéal mettre #!/usr/bin/env bash pour une plus grande portabilité. Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 29 août 2008 Partager Posté(e) le 29 août 2008 D'après wikibooks.org [1], la syntaxe $(...) est aussi disponible en bourne shell. Ils disent quand même que certains shells ne la supportent pas, mais bon, ça doit être vraiment très très vieux et je doute que ça soit vraiment le contexte ici. Le truc c'est que $(...) marche avec n'importe quel shell POSIX, c'est dommage d'appeller explicitement bash alors que n'importe quel shell POSIX marche. Un shell où $(...) n'est pas authorisé, ça veut dire qu'il n'est pas POSIX, si ça n'est pas le cas, où est la syntaxe authorisée? En gros ça revient un peu à lancer un script dans un environnement inconnu, et c'est pas comme si personnellement j'avais un seul système comme ça pour tester. [1] http://en.wikibooks.org/wiki/Bourne_Shell_...ng/Substitution Lien vers le commentaire Partager sur d’autres sites More sharing options...
djuke Posté(e) le 29 août 2008 Partager Posté(e) le 29 août 2008 sh n'est pas un shell Posix. # cat /etc/release Solaris 10 8/07 s10s_u4wos_12b SPARC Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms. Assembled 16 August 2007 # echo $0 sh # ls $(pwd) syntax error: `(' unexpected Solaris 10 update 4. Par contre ça passe en HP-UX 11.11, je viens de tester et dans tous les AIX (sous AIX, /bin/sh et en fait korn shell). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.