Chacun a remarqué le mot-clef HOMEDIR dans la commande CRTUSRPRF (Créer
un profil utilisateur). Cette zone se voit assigner par défaut la valeur
/home/[usrprf]. Elle désigne le répertoire IFS personnel de l’utilisateur.
Ce chemin doit néanmoins être créé (faire un MKDIR '/home/mon_userid').
On peut choisir un autre emplacement, du moment qu’on y a accès.
Le .profile est un fichier lu par le système au démarrage du shell,
il permet de modifier les valeurs d’environnement avec la commande
export (cf plus bas).
Cela étant dit, dans /home/mon_userid, je crée un fichier nommé .profile qui contient ce qui suit.
PWD est une commande QSHELL qui signifie « print working directory » et
affiche le répertoire en cours. PS1 est la « primary prompt string » (chaîne
première du prompt). EXPORT permet d’attribuer une valeur à
une variable d’environnement.
Pour créer le fichier, utiliser EDTF — ou tout autre moyen
(cf infra) — avec la simple commande :
EDTF '/home/monuserid/.profile'.
Le shell affichera désormais le répertoire en cours avant le prompt :
Schéma d’une commande CL utilisant QSHELL
Commande qui permet de passer une suite de paramêtres :
Création de la commande
CL :
SQL facile sur AS/400-iSeries avec QSHELL
Finies les limitations des CL et les complications des RPG. Démonstration
interactive :
Pour avoir de la place sur l’écran sous PDM, on a actionné [F10] puis [F11]
Noter le point au lieu de la barre oblique (slash) qui sépare le nom de bibliotèque (« collection »)
du nom du fichier (« table »).
Au lieu d’être affichée, la sortie est dirigée
vers un fichier texte de l’IFS.
Comme toutes les commandes QSHELL, DB2 désigne ici un lien symbolique objet
AS/400 de type *PGM, en l’espèce vers QZDFMDB2.
Affichage de la sortie :
Donne :
Rappel : sur l’AS/400, les données seront toujours lues
correctement, parce que le système tient compte de la page de code (ou CCSID)
des données. Mais dans un partage réseau vu depuis un PC, il peut arriver
que s’affiche quelque-chose comme ce qui suit :
Il conviendra donc de gérer l’encodage du fichier récepteur,
ce qui (avec CHGATR, ou TOUCH, ou SETCCSID...)
est l’enfance de l’art si l’on se réfère à
la page ad-hoc. [http://www.dg77.net/tekno/as400/ccsid.htm#ifs]
Comment sortir dans un fichier la LISTE DES MEMBRES d'une bibliothèque avec leur TAILLE ?
Mieux (en format csv) :
Java et QSH — zipage/compression de fichiers
Dans le QSHELL une classe java peut être créée
(commande javac) ou lancée (commande java). Voir un exemple dans la
page Mini-tutorial Java, section :
Création d’un premier programme Java sur IBM AS400 / iSeries. [http://www.dg77.net/tekno/java/index.htm#as400]
QSHELL permet en effet l’utilisation des commandes et outils du Developper Kit for Java :
ajar, appletviewer, apt, extcheck, idlj, jar, jarsigner, javac, javadoc, javah,
javap, keytool, native2ascii, orbd, pack200, policytool, rmic, rmid, rmiregistry,
serialver, servertool, tnameserv, unpack200.
Voici un petit CL pour « ziper » (comprimer) les fichiers d’un répertoire
IFS, utilisant ajar.
Valeurs d’environnement
Généralités et export
Dans la page sur Java référencée ci-dessus,
on trouve l’utilisation d’une valeur d’environnement pour enregistrer le CLASSPATH.
La méthode indiquée utilise le QSHELL interactif. On peut obtenir le même
résultat avec la commande SHELL export.
Le précédent export ajoute à la valeur CLASSPATH en
cours (précédant le « : ») un chemin
supplémentaire.
Ici on gère les valeurs d’environnement pour ne pas avoir de sortie des messages d’information.
Noter l’enchaînement des commandes, séparées de point-virgules
(« ; »).
Création d’un script
Ci-dessous, utilisation d’EDTF
On peut aussi éditer sur PC puis transférer (copier-coller ou
glisser-déposer (drag and drop) via iSeries-Access ;
ou encore éditer directement via un « lecteur réseau »
si on en dispose.
EDTF s’utilise à-peu-près comme PDM.
Exemple : script interactif (recherche dans des membres sources)
Noter ci-dessous l’utilisation de :
read : attend une entrée.
test en différentes options : -e, -d..
system : lance une commande AS/400-iSeries
tee : sortie simultanée dans plusieurs directions (ici stdout et un fichier.
Comment lancer la commande QSHELL en ligne de commande iSeries
(ou dans un CL). Exemple pour la commande : sed -e "s/ //g"
(voir plus bas)
Sed et iconv, suppression des caractères espace
et maîtrise de l’encodage.
sed -e "s/ //g" remplace les espaces par null.
Attention : la sortie d’une utility QSHELL est codée
dans le CCSID de la session. D’où l’utilisation de iconv :
le fichier IFS lu en entrée est le résultat d’un CPYTOIMPF qui
avait créé un fichier au codage Windows, mais le sed le remet
en EBCDIC (1147). L’utilitaire iconv permet de retomber dans l’encodage
voulu (1252).
Grep et datarea, comptage
On compte (option -c) le nombre d’occurences d’une chaîne dans un membre
source. Le résultat obtenu est mis (datarea option -w) dans la foulée
dans une zone de données (DATA AREA) AS/400.
Grep, liste de membres contenant une chaîne de caractères
Sans l’option -l, GREP ajoute la ligne où se trouve la chaîne de
recherche à chaque enregistrement sorti. Noter la sortie vers un fichier avec >
au lieu de la sortie standard.
Pour afficher le fichier sorti :
Si on veut récupérer les données sur PC, ne pas oublier
la conversion :
Find + basename, liste de membres sources
Utilise basename pour éliminer le PATH ({}) et le suffixe
(.MBR, attention : le suffixe est case sensitive). Noter aussi le
point-virgule avec ESCAPE (\) à la fin de la commande lancée par
-exec.
Find, liste de fichiers
Affichage depuis un autre système grâce à QfileSvr.400.. Voir la page
Transferts de fichiers sur iSeries [http://www.dg77.net/tekno/as400/transfer.htm#ifs].
Find + rm, suppression périodique de fichiers
Suppression d’une série de fichiers dont la dernière
modification date de plus de 30 jours
Affichage des sous-répertoires d’une arborescence
Explications :
ls avec option -R lit récursivement les sous-répertoires.
grep '/' et sans option ne prend que les lignes ayant un slash.
On met la sortie dans un fichier div.txt au lieu de l’afficher
Pour voir la sortie, sous QSHELL : cat /tmp/div.txt.
DSPLNK '/tmp/div.txt' permet d’afficher la même
chose. Résultat :
Pour enlever les ennuyeux ":" en fin de ligne, je rajoute un sed :
ls -R /home/guebey | grep ''/'' | sed -e "s/://g" > /tmp/div.txt