1
votes

Comment créer une séquence de fichiers .log avec un script shell?

J'ai besoin d'aide, j'ai besoin de créer une séquence de fichiers. Ex. 1.log 2.log 3.log 4.log et ainsi de suite, détail J'ai besoin de définir la valeur initiale et la valeur finale qu'il crée pour moi dans le dossier souhaité. Ci-dessous le code plus ou moins avec l'idée que je veux, le fichier s'appelle inuti.sh

#!/bin/sh
echo -e " ENTER INITIAL NUMBER: "
read num1

echo -e " ENTER THE FINAL NUMBER NOW: ";
read num2

#num3 = num1
#num4 = num2
cd /var/actus/digital/nfce/inutilizar/
touch {$num1..$num2}.log
ls /var/actus/digital/nfce/inutilizar/

génère un fichier exemple comme s'il avait défini 1 et 2, il génère {1 ..2} .log et moi devons générer 1.log et 2.log


1 commentaires

Si vous recherchez le comportement habituel des journaux système, c'est un peu plus complexe et les nombres incrémentiels remontent en arrière dans le temps, pas en avant.


3 Réponses :


0
votes

Vous pouvez utiliser l'utilitaire seq qui peut imprimer des nombres consécutifs:

#!/bin/bash

Si le nombre de chiffres est supérieur à 5, vous pouvez augmenter la valeur à l'intérieur p >

BTW sera beaucoup plus facile si vous changez la première ligne de votre script de

#!/bin/sh

à

touch $(seq -f "%5.0f.log" $num1 $num2)

et gardez le reste. IMHO cette expression (avec des accolades) ne fonctionne pas dans Bourne Shell.


2 commentaires

Cela pourrait fonctionner à des fins limitées et il est possible que des fins limitées soient tous les besoins du demandeur. Mais si le demandeur s'attend à quelque chose comme le comportement habituel du journal système, il manquera ce que fait une rotation réelle du journal, les nombres seront inversés par rapport au temps, il ne compressera pas les fichiers plus anciens ou ne les supprimera pas, etc.


@ChrisStratton, tout cela est correct. Mais à partir de la question OP, je ne vois rien sur la rotation des journaux, la compression, etc.



0
votes

La forme valide de expansion d'accolades nécessite que des entiers soient présents entre les crochets. Lorsque vous exécutez votre script, seule une substitution d'entier a lieu, ce qui convertit {$ num1 .. $ num2} en, par exemple, {1..2} . Pour que ce formulaire correct soit traité ultérieurement, utilisez la commande eval :

eval touch {$num1..$num2}.log


0 commentaires

0
votes
-rw-r--r-- 1 runner runner    0 Jul 30 05:49 3.txt
-rw-r--r-- 1 runner runner    0 Jul 30 05:49 2.txt
-rw-r--r-- 1 runner runner    0 Jul 30 05:49 1.txt

0 commentaires