GNU/Linux >> Tutoriels Linux >  >> Linux

Comment passer plusieurs arguments à exécuter avec le script .sh

La méthode la plus simple pour lire les arguments peut être décrite comme suit :

Chaque argument est référencé et analysé par le $IFS ou internal file separator actuellement défini . Le caractère par défaut est un espace.

Par exemple, prenez ce qui suit ; # ./script.sh arg1 arg2

La liste d'arguments dans cet exemple est arg1 = $1 et arg2 = $2 qui peut être réécrit sous la forme arg1 arg2 = [email protected] .

Une autre note est l'utilisation d'une liste de journaux, à quelle fréquence cela change-t-il ? Mon hypothèse est quotidienne. Pourquoi ne pas utiliser la sortie du répertoire comme tableau de votre boucle itérative ? Par exemple ;

for i in $(ls /path/to/logs); do
  ./workaround.sh $i;
done

Ou mieux encore, passez à l'utilisation de functions dans bash pour éliminer l'encombrement.

function process_file()
{
  # transfer file code/command
}

function iterate_dir()
{
  local -a dir=($(ls $1))
  for file in ${dir[@]}; do
    process_file $file
  done
}

iterate_dir /path/to/log/for

Bien que ce ne soient que des suggestions pour améliorer vos connaissances en matière de scripts shell, je dois savoir s'il y a une erreur que vous obtenez et j'aurais également besoin de connaître les détails de chaque code de script et/ou fonctionnalité. Utilisation du -x aide également à déboguer les scripts.

Si vous transférez simplement des journaux, vous souhaiterez peut-être supprimer tous les scripts et utiliser rsync , rsyslog ou syslog car ils sont tous beaucoup plus adaptés à la tâche en question.


xargs -n 1 ./script.sh <list.txt

Dans cet exemple, xargs exécutera ./script.sh plusieurs fois avec un seul argument lu depuis son entrée standard.

L'entrée standard provient du fichier list.txt via une simple redirection d'entrée du shell. Cela suppose que le list.txt le fichier contient un argument à utiliser avec le script par ligne.

Le ./script.sh le script sera exécuté une fois pour chaque ligne dans le list.txt fichier.

À propos du -n indicateur à xargs

-n number

Appeler utilitaire en utilisant autant d'arguments d'entrée standard que possible, jusqu'à number (un entier décimal positif) argumentsmaximum.

Une autre solution serait de permettre au script de lire directement depuis list.txt , ou pour prendre plusieurs arguments de ligne de commande (les entrées de list.txt ), et de télécharger les fichiers en un ou plusieurs lots. Mais puisque nous ne connaissons pas la mécanique du script, je ne peux pas donner d'explication détaillée sur la façon de procéder.


à l'intérieur du script :vous avez besoin d'une boucle de lecture comme while read ; do ......... ; done < filename pour traiter les lignes comme des variables $REPLY...

par exemple

while read 
do
mv $REPLY $REPLY.old
done < liste.txt

renommera n'importe quel nom de fichier à l'intérieur de liste.txt en filename.old

vous avez maintenant la structure que vous pouvez adapter à vos besoins en fonction de ce que vous entendez par " dans le nom de chaque fichier journal dans list.txt à exécuter." :)


Linux
  1. Comment changer l'extension de plusieurs fichiers ?

  2. Passer les arguments de la ligne de commande au script Bash ?

  3. Comment gérer les commutateurs dans un script shell ?

  4. Comment obtenir Ls pour répertorier les répertoires avec une barre oblique à la fin ?

  5. Comment passer des paramètres à un script Bash ?

Comment écrire un script bash avec des exemples

Comment exécuter une commande Shell avec Python

Comment lister les systèmes de fichiers sous Linux avec lfs

Comment exécuter une commande dans un script shell ?

Comment passer des arguments à un script invoqué par la commande source ?

Comment exécuter un script bash ?