Warning: Parameter 1 to behaviorsPagesStatiques::addTplPath() expected to be a reference, value given in /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/core/class.dc.core.php on line 304

Warning: Cannot modify header information - headers already sent by (output started at /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/core/class.dc.core.php:304) in /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/libs/clearbricks/common/lib.http.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/core/class.dc.core.php:304) in /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/libs/clearbricks/common/lib.http.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/core/class.dc.core.php:304) in /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/libs/clearbricks/common/lib.http.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/core/class.dc.core.php:304) in /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/libs/clearbricks/common/lib.http.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/core/class.dc.core.php:304) in /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/public/lib.urlhandlers.php on line 85

Warning: Cannot modify header information - headers already sent by (output started at /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/core/class.dc.core.php:304) in /home/flyounet/dev.flyou.net/dotclear-2.2.3/inc/libs/clearbricks/common/lib.http.php on line 273
Flyou.net [Dev] : Développements

Aller au contenu | Aller au menu | Aller à la recherche

Flyou.net [Dev] : Développements

vendredi 9 novembre 2012

Comment ajouter un fichier au début d'un autre en Shell

Voilà le topo, vous faites du Shell (si si, y en a) et vous devez pour d'obscures raisons ajouter le contenu d'un fichier (appelons le aCopier.txt) au début d'un autre (appelons le destination.txt).

Par exemple :

fly@dtc:~$ cat aCopier.txt
# Ho la belle ligne que je me dois de copier au début d'un autre fichier
# Entete,id,securities,ftt(French_Tax_Tobin)
fly@dtc:~$ cat destination.txt
bnp,7553,37426,130054874
cmcic,425,1271,99412364
ca,1103,17345,94577741
sg,211,914,4113647

Souvent les gens prennent le fichier destination, le copient à la fin du fichier à copier et remplace le fichier destination, ce qui se traduit souvent par un :

fly@dtc:~$ cat destination.txt >> aCopier.txt && mv aCopier.txt destination.txt
fly@dtc:~$ cat destination.txt
# Ho la belle ligne que je me dois de copier au début d'un autre fichier
# Entete,id,securities,ftt(French_Tax_Tobin)
bnp,7553,37426,130054874
cmcic,425,1271,99412364
ca,1103,17345,94577741
sg,211,914,4113647

J'y vois personnellement deux inconvénients :

  • L'opération n'est pas atomique[1]
  • On perd le fichier aCopier.txt dans l'opération.

Donc pour moi, la solution est plutôt : echo "$(<aCopier.txt)" "$(<destination.txt)" > destination.txt

Non seulement, cela a l'avantage d'être du Shell only (Bash ou KSH), mais il me reste le fichier à copier...

Notes

[1] Par atomique, j'entends qu'il y a plusieurs étapes successives et donc que pour un retour arrière, c'est plus embettant. D'autant plus à cause du point suviant...

mardi 31 juillet 2012

Retrouver ses Librairies

Comme bien souvent quand on écrit un script en Shell, on se pose la question des fichiers de paramètres et régulièrement on en arrive à gérer le petit -c configFile ou -f configFile. Cependant, lorsque des librairies sont à charger on veut être sûr de là où elles sont.

Dans mon cas, je mets mes librairies dans un sous répertoire du script à appeler. C'est classic et simple. Par contre, là où ça devient un brin chiant, c'est quand le file system contenant le script est truffé de liens symboliques et que le script est appelé via un lien ; une fois sur deux on retrouve pas ses petits.

J'ai donc pris l'habitude de commencer chacun de mes scripts avec les lignes suivantes (qui fonctionnent avec un vieux KSH ou Bash (et même sur AIX) :

__sName="${0}"; __pName="${0}";
if [ -L "${0}" ]; then
    __="$(command -v "readlink")"
    if [ "readlink" = "${__##*/}" ]; then
        __sName="$(readlink -m "${__sName}")"
    else
        __sName="$(set -- $(LC_ALL=C file "${0}"); echo ${5:1:$((${#5} - 2))})"; __sName="$(dirname "${__pName}")/$(dirname "${__sName}")/${__sName##*/}"
    fi
fi
__pName="$( cd "${__sName%/*}" ; pwd )"; __sName="${__pName}/${__sName##*/}"; __fName="${__sName##*/}"

Ainsi, je peux charger ce que j'ai besoin avec un . ${__pName}/lib/F01/common.lib

Donc :

  • __pName contient le chemin absolu du script (avec les liens suivis et tout et tout),
  • __sName contient le chemin complet et nom du script (avec les liens résolus, donc absolu),
  • __fName contient le nom final du script (et pas le nom du lien si appelé par un lien).

lundi 26 septembre 2011

Comment déterminer les répertoires associés à un disque sur AIX

Alors qu'il y a peu, je me posais la question inverse, à savoir : Comment déterminer un disque en partant d'un répertoire sur AIX, j'ai aujourd'hui la problématique inverse et ça fait chier !

Donc pour pas perdre de temps voici comment faire simple :

# r='hdisk5';for vg in $(lsvg); do lsvg -l $vg | tail +3 | awk '{print $1,$NF}' | while read dsk lv; do if lslv -l $dsk|grep $r>/dev/null; then echo "$vg - $lv"; fi;done; done
appvg - N/A
appvg - /var/mqm
appvg - /opt/IBM/ITM
appvg - /u01
appvg - /app_nfs

On remplace le r=blabla et on lance en root évidemment.

lundi 29 août 2011

RFC 1924 : IPv6 compression (A Compact Representation of IPv6 Addresses)

You know how it works, your wife left you with childrens to see her mother... And you're alone for the entire week end. So you read April Fool's RFC, and you decide to implement one for fun.

What is it about ?

First of all, the RFC, i choose, was the 1924. To make it simple, it's only a sort of How to compress IPv6 to store them more efficiently.

 $ ./ipv6Converter.sh -I ab:CD:ef:01:23:45:67:89
 The IPv6 you enter is         : [ab:CD:ef:01:23:45:67:89]
 ---------------------------------------------------------
 IPv6 expanded is              : [00ab:00cd:00ef:0001:0023:0045:0067:0089]
 IPv6 shrinked (RFC5952) is    : [ab:cd:ef:1:23:45:67:89]
 IPv6 decimal format is        : 887899004871704238012413915815149705
 IPv6 compressed (RFC1924) is  : Gk+pw{*-scXTvbLbnhP

More info ?

ipv6Converter.sh on Trac.

Download

v0.03[1]
v0.04 (SHA1SUM : 63f5f5abd9b9d8fdb5556b284a254bca3ed64920)

Pre-requisites

  • Bash 4 minimum
  • your happyness

Notes

[1] A little bug forced me to release v0.04...

mercredi 20 juillet 2011

Comment déterminer un disque en partant d'un répertoire sur AIX

Oui, bon alors, il y en a qui vont dire : "Ton titre, il est nul, on ne comprend rien". C'est probable, mais c'est surtout un pense-bête pour moi-même.

Donc admettons que nous connaissions le répertoire /opt/WebSphere61, un simple df me donne quelques informations :

   # df -k /opt/WebSphere61
   Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on
   /dev/was61log     4128768    344040   92%     2370     3% /opt/WebSphere61

Cependant je n'ai toujours par connaissance du disque. Voyons si lsfs peut nous aider :

# lsfs
Name            Nodename   Mount Pt               VFS   Size    Options    Auto Accounting
/dev/hd4        --         /                      jfs2  131072  --         yes  no 
/dev/hd1        --         /home                  jfs2  65536   --         yes  no 
/dev/hd2        --         /usr                   jfs2  7208960 --         yes  no 
/dev/hd9var     --         /var                   jfs2  1114112 --         yes  no 
/dev/hd3        --         /tmp                   jfs2  2162688 --         yes  no 
/dev/hd11admin  --         /admin                 jfs2  262144  --         yes  no 
/proc           --         /proc                  procfs --      --         yes  no 
/dev/hd10opt    --         /opt                   jfs2  9699328 --         yes  no 
/dev/was61log   --         /opt/WebSphere61       jfs2  14548992 rw         yes  no 
/dev/lvcode     --         /code                  jfs2  20971520 rw         no   no 

Donc pas mieux... Mais pas pire non plus...

D'où, deux choix, je me farci tous les VGs à la main pour déterminer le LV en fonction du répertoire cherché, comme ça :

# lsvg
rootvg
appvg
datavg

# lsvg -l rootvg
rootvg:
...
# lsvg -l  appvg
appvg:
...
# lsvg -l  datavg
datavg:
...
was61log            jfs2       63      63      1    open/syncd    /opt/WebSphere61
...

Ou alors, je suis une faignasse et je tape :

# for vg in $(lsvg); do echo "${vg}: "; lsvg -l "${vg}" grep /opt/WebSphere61; done
rootvg: 
appvg: 
datavg: 
was61log            jfs2       63      63      1    open/syncd    /opt/WebSphere61

Me reste plus qu'un petit lslv et pis c'est tout :

# lslv -l was61log
was61log:/opt/WebSphere61
PV                COPIES        IN BAND       DISTRIBUTION  
hdisk5            063:000:000   100%          000:063:000:000:000 

Donc mon répertoire est sur le disk 5...

Bon je suis sympa, il y a plus simple :

# r="/opt/WebSphere61";for vg in $(lsvg); do a=$(lsvg -l $vg | awk -vrep=$r '($0 ~ rep){ print $1}'); [[ -z $a ]] || lslv -l $a;done
was61log:/opt/WebSphere61
PV                COPIES        IN BAND       DISTRIBUTION  
hdisk5            063:000:000   100%          000:063:000:000:000 

samedi 7 mai 2011

Le shell pour tout expliquer : World Supremacy - Draw Game

Le shell permet de quasiment tout faire ; pourquoi ne pas tout expliquer par le Shell :

everybody@worldsupremacy$ ssh laden@home
laden@home$ sudo mv kamikz /home/usa
Password:
laden@home$ ssh kamikz@usa
kamikz@usa$ mv /home/usa/planes /home/usa/worldTrade/center
kamikz@usa$ rm -rf /home/usa/worldTrade
kamikz@usa$ logout
laden@home$ logout
everybody@worldsupremacy$ ssh usa@home
usa@home$ locate laden
usa@home$ ssh usa@irak "find /home -name laden"
usa@home$ ssh usa@afganistan "find /home -name laden"
usa@home$ ssh usa@pakistan  "find /home -name laden"
usa@pakistan's password:
find: "/home": Permission denied
usa@home$ ssh seals@pakistan
seals@pakistan's password:
Permission denied, please try again.
seals@pakistan's password: 
Permission denied, please try again.
seals@pakistan's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
usa@home$ ssh seals@pakistanBackDoor
ssh: connect to host pakistanBackDoor port 22: Connection refused
usa@home$ cat operation.txt
 + Operation Neptune's Spear
 + Kill  Geronimo
 + Take photos
 + Be nice
usa@home$ grep -i way /etc/services | grep spear
spearway	2440/udp    # Spearway Lockers
spearway	2440/tcp    # Spearway Lockers
usa@home$ ssh -p 2440 -R3615:localhost:22 seals@pakistanBackDoor
seals@pakistanBackDoor's password:
seals@pakistanBackDoor$ cd /bin
seals@pakistanBackDoor$ killall -TERM laden
seals@pakistanBackDoor$ import -window root bin_laden_ScreenHeadShot.png
seals@pakistanBackDoor$ scp -P3615 bin_laden_ScreenHeadShot.png usa@localhost:
usa@localhost's password:
seals@pakistanBackDoor$ mv /bin/laden /usr/games/fillets
seals@pakistanBackDoor$ ln -s /usr/games/fillets /usr/games/fishFilletsNG
seals@pakistanBackDoor$ logout
usa@home$ scp usa@pakistan:./bin_laden_ScreenHeadShot.png /dev/null
usa@pakistan's password: 
everybody@worldsupremacy$ logout

mercredi 4 mai 2011

Petite note pour plus tard (FCGI + Dotclear)

Après mettre rendu compte que les billets ne fonctionnaient plus (ça doit faire plusieurs mois que ça ne fonctionne plus), il semble acquis qu'un problème lié à FastCGI + mod_rewrite existe, aussi la méthode la plus simple est de ne pas l'utiliser, car même la méthode d'ajouter un ? ne fonctionne pas partout...

Si ce n'est pas clair, ce n'est pas grave c'est personnel, pour plus tard...

Lire une page de man (non installée) en local (sur AIX)

Bon comme sur AIX, je me trimballe du Bash 3.0, autant dire que le "parameter expansion" est quasi inexistant. Donc quand on a pas le droit d'installer un Bash 4, on le colle dans un répertoire quelconque. Oui mais pour lire la page de man qui n'est pas installée ?

man -m -M ../myAIXBash4/opt/freeware/man/ bash
-M PATH pour indiquer le path de la page de man. On ne met surtout pas : ../myAIXBash4/opt/freeware/man/man1/ !
-m pour ne chercher que dans le path indiqué par le -M
la page cherchée

jeudi 29 juillet 2010

Reminder : Conversion ISO-8859-1 vers UTF-8

Pour ne pas me poser la question chaque fois :

iconv -f iso-8859-1 -t UTF-8 < monfichier.8859 > monfichier.utf8

lundi 7 juin 2010

TaskFreak ! v0.6.3b (unofficial)

TaskFreak ! is a PHP tools to manage your Todo list. Based on the v0.6.3 multi, here is my modified version.

What's added ?

  • the Plugin manager : with a little modification to avoid it to look into subversion subdirectories,
  • the 99% task finished : instead of closing a task, you have to raise the 99% percent level to close task,
  • the id an requester column,
  • the File transfer plugin,
  • EmailNotify : email when a task is created, modified, deleted, closed,
  • dueTasks : email when a task is due,
  • the Deadline updater plugin with a little modification (it sends an email when date is changed),
  • the beginning of the implementation of a backup user (not finished yet),
  • when a task is Priority 1, you cannot miss it,
  • some informations in the header,
  • 1 or 2 modifications in the redfreak template,
  • you can search an ID of task,
  • there is some help,
  • and maybe I forget 1 or 2 things.

And after what ?

svn co http://code.flyou.net/webDev/taskfreak_multi/trunk
Update 09/06/2010 : I'd to restrict access to the svn, due to my mistake. I added a config file with live informations...
So, svn close until i correct the problem...
Ok svn is reopen.

Lire la suite...

jeudi 27 mai 2010

Quel est le meilleur moyen pour savoir le nom d'un fichier pointé par un lien ?

Vaste question qui ne me semble reposer que sur 3 réponses :

  • L'utilisation de stat,
  • L'utilisation de file,
  • L'utilisation de readlink.
Utilisons stat :
fly@Capote:~/tmp$ stat /tmp/totoz
  File: `/tmp/totoz' -> `/tmp/pipo'
  Size: 40        	Blocks: 0          IO Block: 4096   lien symbolique
Device: 808h/2056d	Inode: 3744        Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/     fly)   Gid: ( 1000/     fly)
Access: 2010-05-27 23:42:00.590730266 +0200
Modify: 2010-05-26 23:34:46.978029853 +0200
Change: 2010-05-26 23:34:46.978029853 +0200

On constate que le nom du fichier pointé est indiqué en première ligne. Donc, la ligne suivante devrait suffire :

fly@Capote:~/tmp$ a="$(stat /tmp/totoz | head -1 | awk '{print $NF}')" ; echo ${a}
`/tmp/pipo'

C'est bien mais pas top avec les quotes, d'où l'astuce suivante :

fly@Capote:~/tmp$ i=${#a}; echo ${a:1:(($i-2))}
/tmp/pipo
Utilisons file :
fly@mst:~/tmp$ file /tmp/totoz
/tmp/totoz: symbolic link to `/tmp/pipo'

On constate maintenant qu'une seule ligne est retournée, mais il y a toujours ce problème de quotes. Donc, on résout de la même manière :

fly@mst:~/tmp$ a="$(stat /tmp/totoz | awk '{print $NF}')" ; echo ${a}
`/tmp/pipo'
fly@mst:~/tmp$ i=${#a}; echo ${a:1:(($i-2))}
/tmp/pipo
Utilisons readlink :
fly@Capote:~/tmp$ readlink /tmp/totoz
/tmp/pipo

Bon, ben voilà; finalement je le préfère ce petit readlink (et de loin)...

jeudi 20 mai 2010

DSSLv1 : Demerden Sie Sich License

Ça y est, j'ai enfin publié ma version 1 de la DSSL. j'en ai profité pour la déclarer sur le site LinuxFR en tant que journal (Voir le journal ci-dessous).

A quoi sert cette Licence ?

Lisez la, et vous saurez.

Pourquoi cette Licence ?

Mais parce que j'en ai marre que l'on pose ce genre de question ! Lisez la Licence et Démerdez-vous.

Le journal :

Pour le boulot, j'ai régulièrement des collègues qui ne se posent même pas la question de savoir ce qu'un bout de code contient, ou plutôt que de lire une documentation m'assoiffent à me poser tout un tas de questions auxquelles j'ai déjà répondu dans la-dite documentation.

Aussi, après maintes recherches, je n'ai pas trouvé de Licence (rédigée) qui correspondrait. Même si la RTFM Licence m'aurait tentée, elle était trop succincte ; juste 5 mots.
Donc, pour ma propre cause, J'ai décidé de passer tout mon boulot sous DSSL et d'en rédiger les termes qui sont maintenant accessibles à l'adresse suivante : [http://dssl.flyounet.net/licenses/]

Je pense l'avoir suffisamment corrigée pour qu'elle puisse être librement utilisée. La licence DSSL étant soumise à elle même, tirez-en les conclusions qui s'imposent.

dueTasks.php v0.01 for TaskFreak !

TaskFreak ! is a PHP tools to manage your Todo list. Written by Stan Ozier the v0.62/v0.63 lacks a tool to send email for due tasks. Here is my little contribution.

Please note, it has only be tested with the multi version (not the single).

Lire la suite...

jeudi 6 mai 2010

Java problem with FreePlane on Ubuntu 9.10 Karmic

If you have such a problem ERROR: Your Java is not a derivative from Sun's code when starting FreePlane (or FreeMind), correct your java with the command :

/usr/sbin/update-alternatives --config java

lundi 3 mai 2010

F01common.lib v0.28

Because I need it, I implement the statusBar function. Test statusBar 01 Test statusBar 02 I tested with KSH and Bash and it seems to work with both.

Changelog :

+ statusBar : generate the informations to have a status bar.
   eg. 0%....5%....10%.... and so on until 100%

Lire la suite...

jeudi 29 avril 2010

bashColors.sh v0.03

Purpose :

As I am writting more Shell code every day. I often need to use color to show to my users the huge mistake they're trying to put with my Shell script[1]
As my wife calls me Red Fish[2], I rarely figure what is the reference for Shell colors. That's why I made this little Script.

Changelog :

v0.01 [30/03/2010] Flyounet  [@Home] :
      > Initiale Release
      > Prerequisites : F01 common.lib (at least v0.24)
v0.02 [21/04/2010] Flyounet  [@Home] :
      > Now Under DSSL & GPLv3
      > set ts=4 ; set noai
      + Add information how to quit
      * When run with Ksh, it show errors about declare... Erased them &
        use typeset instead.
v0.03 [27/04/2010] Flyounet  [@Home] :
      + Added the work 'effect' in the rainbowTable function
      > Now use the F01common.lib v0.27

Notes

[1] It remembers me a newbie that wants to put his saves in /dev/null, because he read on Internet, this folder compress incredibly everything. Don't laught ! I'm pretty sure everyone already met one of this people...

[2] I now know it's for my memory.

Lire la suite...

mardi 27 avril 2010

F01common.lib v0.27

Due to lots of bugs in the previous version, I'm happy to show you this one with I hope no bug inside.

Nearly all tests have been done with Ksh, and unfortunately I forget to test under Bash, and that's the result... Sorry.

Changelog :

 > Problem with the Bash version. If old Bash is use BASH_SOURCE
   doesn't exist...
   Now looks for the files instead of trying to load it directly to
   avoid, error messages. Search in above and under directory.
 * F01Version return the path of the Bash extension.
 * trim : Huge bug ! Instead of unsetting __ltrim & __trim, i unsetted
   functions ltrim & rtrim...
 > ltrim & rtrim don't work under Bash ! ARGGGGGGGGGGGGG !!!!!
 * iniParseFile : In case of a line only containing a left var with
   incorrect character (like a dash -), the awk version sent an error
   to the output (and under Ksh stops).
   Function has been rewritted purely in Shell...
 * sprintf : Problem under Bash. Bash doesn't support only one _ as a
   variable name : Corrected.
 * iniGetValue : Not use grep anymore. Only Shell !
 * fileCheck : Problem under Bash. Bash doesn't support only one _ as
   a variable name : Corrected.
 * logMe : Problem under Bash. Bash doesn't support only one _ as a
   variable name : Corrected.
 > Now only logRotate use non-shell programs !
 + myError : If none args then empty __lastError

Lire la suite...

jeudi 22 avril 2010

F01common.lib v0.26

J'ai oublié de publier les précédentes versions, aussi je vous présente cette nouvelle version.

Après pas mal de boulot, il ne reste plus que la fonction iniParseFile qui continue d'utiliser awk, sinon tout le reste n'utilise plus que le Shell avec lequel il a été exécuté.
Et j'en ai profité pour passer le code sous GPLv3 et DSSL (disponible ).

L'incontournable Changelog :

 v0.23 [30/01/2010] Flyounet  [@Home] :
       * fileCreate: In case of error during touch an ugly message is now
         sent to /dev/null (for chmod too)
 v0.24 [03/03/2010] Flyounet  [@Home] :
       > First svn version
 v0.25 [01/04/2010] Flyounet  [@Home] :
       + textFill: equivalent to perl "string" x number
       + textBox: put a caracter all around a text
       * textBox: not working with KSH
       + _str2lower & _str2upper have been added, cause to KSH that doesn't
         support Case modification of Bash.
       * textBox: now use _str2*er and work with KSH
       * iniGetValue: Remove the call to awk (Yeah ! Love shell !)
 v0.26 [22/04/2010] Flyounet  [@Home] :
       + parseHeadersForHelp: Print the headers of each function in a file.
         Headers are based on a first line containing a #F??.
       > textBox: Only works with KSH... Fuck !
       * textBox: A subfile is needed to make it works with bash.

J'ai tenté de la rendre la plus indépendante possible de sed et awk qui sont assez incontournable[1]. Elle fonctionne sous bash ou ksh.

Ci-dessous un aperçu des variables et fonctions : common.lib.png

En annexes sont fournis les fichiers indépendants, ainsi qu'une archive regroupant le tout.
Les fichiers sont :

  • common.lib_v0.26.tar.bz2 : L'archive qui contient tous les fichiers,
  • common.lib.README : Une micro documentation,
  • common.lib : La librairie Shell,
  • _common4bash.lib : L'extension pour Bash de la fonction textBox(),
  • doc/common.lib.mm : La liste de fonctions et variables sous forme de fichier Free(Mind|Plane),
  • doc/common.lib.png : La liste de fonctions et variables sous forme de fichier image,
  • test/libHelp.sh : Un script de test qui retourne de l'aide sur les fonctions,
  • test/test_common-lib.conf : Un fichier de configuration pour exécuter le script de test,
  • test/test_common-lib.sh : Un script de test, qui exécute quasiment toutes les fonctions de la librairie.

Les md5 des fichiers :

26ecc237a2dcc4f74f3a21ed3db809d6  _common4bash.lib
2c540c2a2516829a7f0796ebdc789979  common.lib
07d486cdcf8c5623a2a17b7183c0b7be  common.lib.README
dde7d1862448a90eaadfd8e2ee5ec811  doc/common.lib.png
606b099e82e48e846c71555b2827237a  doc/common.lib.mm
d04d3958e604ffdd69d5387d6c95110f  test/libHelp.sh
51504fd29f5fd1aa73137d73657536ae  test/test_common-lib.conf
21793fdcd0cc20cf16743e223d157a63  test/test_common-lib.sh
4cef5fce3dc9d224333540b91bd53f61  F01common.lib_v0.26.tar.bz2

Les sha1 des fichiers :

123dfbdbce15d27c0d5ca8a927d5d2fe0a575b41  _common4bash.lib
72e7de48dd30ef059bc16bbd809536505de62cdf  common.lib
fa9dead34dbc604a49ddf15b81805d288a9a0157  common.lib.README
0acab9ac384dfb9ce9e30baa4195cd2088fc069b  doc/common.lib.png
d32b6a8c2ad02816031b1e2f39dde6d7f41818af  doc/common.lib.mm
f8f1bf4afb8e54ec122f5f6e67a8a0bba72e98c8  test/libHelp.sh
34a05abbd28321b353c34b4003b7e001afd8a1b0  test/test_common-lib.conf
db07298d8710c78ca681dc4496408ee4901aa000  test/test_common-lib.sh
b849101928c71eec69f7623b233f369bf0dcfd3c  F01common.lib_v0.26.tar.bz2

Ci-dessous la liste des fonctions :

#F01.01.03
#Function : ps2, Print to screen string passed in argument
#F01.02.02
#Function : p2st, Print to screen string passed in argument, with Time before
#F01.03.01
#Function : oops, Print to screen string passed in argument, and exit 1
#F01.04.01
#Function : oopst, Print to screen string passed in argument, with time before, and exit 1
#F01.05.06
#Function : myDebug, Print to screen string passed in argument if debug level is reach
#F01.06.02
#Function : myError, Store error in variables
#F01.07.02
#Function : fileCheck, Check file for presence and permission
#F01.08.02
#Function : fileCreate, Create file with permissions if asked
#F01.09.01
#Function : fileDelete, Delete the specified file
#F01.10.04
#Function : iniGetValue, Get the value from a specified INI file
#F01.11.04
#Function : iniParseFile, Set all values from a specified INI file
#F01.12.03
#Function : trim, Remove all blank from begining and end
#F01.13.03
#Function : logRotate, Transfer the begining of a file to the rotationned version.
#F01.14.01
#Function : logMe, Send the log to the log files
#F01.15.01
#Function : logMeV, Send the log to the verbose log files
#F01.16.03
#Function : isFunction, Verify that the function exists
#F01.17.07
#Function : sprintf, return a formatted string
#F01.18.02
#Function : ltrim, Remove all blank from begining
#F01.19.02
#Function : rtrim, Remove all blank from end
#F01.20.01
#Function : _str2lower, lower all characters
#F01.21.01
#Function : _str2upper, upper all characters
#F01.22.01
#Function : textFill, Create a text filled by the caracter
#F01.23.03
#Function : textBox, Create a box around the text
#F01.24.05
#Function : parseHeadersForHelp, Print headers of function for a given file
#F01.99.02
#Function : F01Version, Return/Print version information
#F01.23-1.02
#Function : _textBox4Bash, Create a box around the text

Notes

[1] Mes fonctions préférées sont sans aucun doute : sprintf et les *trim.

lundi 25 janvier 2010

F01common.lib v0.22

Après plusieurs mois à codouiller[1] des petits bouts de script Shell, j'ai décidé d'en faire librairie : F01common.lib.

J'ai tenté de la rendre la plus indépendante possible de sed et awk qui sont assez incontournable[2]. Elle fonctionne sous bash ou ksh.

Ci-dessous un aperçu des variables et fonctions : common.lib_v0.22.png

En annexes sont fournis les fichiers indépendants, ainsi qu'une archive regroupant le tout.
Les fichiers sont :

  • common.lib.README : Une micro documentation,
  • common.lib_v0.22 : La librairie Shell,
  • common.lib_v0.22.mm : La liste de fonctions et variables sous forme de fichier Free(Mind|Plane),
  • common.lib_v0.22.png : La liste de fonctions et variables sous forme de fichier image,
  • common.lib_v0.22.tar.bz2 : L'archive qui contient tous les fichiers,
  • test_common-lib.conf : Un fichier de configuration pour exécuter le script de test,
  • test_common-lib.sh : Un script de test, qui exécute quasiment toutes les fonctions de la librairie.

Les md5 des fichiers :

16fc140f5a69acdcbe5e1a21be185772  common.lib.README
3f5c5a78a3bc2da85e86395d65b88188  common.lib_v0.22
31bd6704a048d38ba1479ec42a0e97b2  common.lib_v0.22.mm
d273f4afd7a95aa8aa899e53f5dca904  common.lib_v0.22.png
1d0c7dd2ce3d264a14bfd442dadf0d24  common.lib_v0.22.tar.bz2
4c550b4593b12cd849af697313139e33  test_common-lib.conf
5520dd6882f166f4688ffef981187b41  test_common-lib.sh

Les sha1 des fichiers :

076770bedcfef3cc2568b0d00185c47a5c84ab89  common.lib.README
b9f251ee69112e2357f716fac604f3bb3d73b627  common.lib_v0.22
b7cf30403aec92271678e14f79af9a4fd1f82df8  common.lib_v0.22.mm
30790cd148091e996415a5f620e5128feb40d986  common.lib_v0.22.png
832f5c6938657396f1361f80ebcb327f31956bd1  common.lib_v0.22.tar.bz2
7113349a4f5d1ddd74e790f4c2fa782ace0af949  test_common-lib.conf
7be004717f6ca2f9281955888c011ac6209b03e7  test_common-lib.sh

Notes

[1] Voir définition ici.

[2] Mes fonctions préférées sont sans aucun doute : sprintf et les *trim.

mardi 19 janvier 2010

Mon petit environnement IRC : Création de fichiers Pipo

Si vous avez utilisé le précédent billet pour vous faire la main sur le XDCC, alors vous risquez d'avoir, comme moi, besoin de fichiers volumineux.

Dans mon joli répertoire /usr/local/src/IRC_dev/XDCC_offers :

for i in $(seq 1 10); do let j=15*$i; let k=1024*$j; echo "File: $j - Size : $k"; dd if=/dev/urandom of=file_${j}MiB bs=1024 count=$k;done

Ligne qui peut se décomposer de la sorte :

for i in $(seq 1 10)
do
 let j=15*$i; let k=1024*$j
 echo "File: $j - Size : $k"
 dd if=/dev/urandom of=file_${j}MiB bs=1024 count=$k
done

Ce qui a pour résultat :

$ ls -lh | awk '{print $5 "\t" $NF}'|tail
105M	file_105MiB
120M	file_120MiB
135M	file_135MiB
150M	file_150MiB
15M	file_15MiB
30M	file_30MiB
45M	file_45MiB
60M	file_60MiB
75M	file_75MiB
90M	file_90MiB

- page 1 de 2