93 votes

Comment lire une variable à partir d'un fichier ?

Je veux insérer dans mon script une valeur (chaîne de caractères) que je lirais à partir d'un fichier texte.

Par exemple, au lieu de :

echo "Enter your name"
read name

Je veux lire une chaîne de caractères à partir d'un autre fichier texte afin que l'interprète lise la chaîne de caractères à partir du fichier et non de l'entrée de l'utilisateur.

137voto

Takkat Points 135194

Pour lire les variables d'un fichier, nous pouvons utiliser la fonction source o . commandement.

Supposons que le fichier contienne la ligne suivante

MYVARIABLE="Any string"

nous pouvons alors importer cette variable en utilisant

#!/bin/bash

source <filename>
echo $MYVARIABLE

78voto

Radu Rădeanu Points 156862

En considérant que vous voulez que tout le contenu de votre fichier texte soit conservé dans votre variable, vous pouvez utiliser :

#!/bin/bash

file="/path/to/filename" #the file where you keep your string name

name=$(cat "$file")        #the output of 'cat $file' is assigned to the $name variable

echo $name               #test

Ou, en pur bash :

#!/bin/bash

file="/path/to/filename"     #the file where you keep your string name

read -d $'\x04' name < "$file" #the content of $file is redirected to stdin from where it is read out into the $name variable

echo $name                   #test

15voto

thom Points 6932

Vous pouvez le faire à partir de votre script :

read name < file_containing _the_answer

Vous pouvez même le faire plusieurs fois, par exemple dans une boucle.

while read LINE; do echo "$LINE"; done < file_containing_multiple_lines

11voto

Jamie Points 1509
name=$(<"$file") 

De man bash:1785 cette substitution de commande est équivalente à name=$(cat "$file") mais plus rapidement.

8voto

Tomas Aschan Points 2772

Une autre façon de procéder serait de rediriger l'entrée standard vers votre fichier, où vous avez toutes les entrées utilisateur dans l'ordre où elles sont attendues par le programme. Par exemple, avec le programme (appelé script.sh )

#!/bin/bash
echo "Enter your name:"
read name
echo "...and now your age:"
read age

# example of how to use the values now stored in variables $name and $age
echo "Hello $name. You're $age years old, right?"

et le fichier d'entrée (appelé input.in )

Tomas
26

vous pouvez l'exécuter à partir du terminal de l'une des deux manières suivantes :

$ cat input.in | ./script.sh
$ ./script.sh < input.in

et ce serait équivalent à simplement exécuter le script et à entrer les données manuellement - il imprimerait la ligne "Bonjour Tomas. Tu as 26 ans, n'est-ce pas ?".

Comme Radu Radeanu tiene déjà proposé vous pouvez utiliser cat à l'intérieur de votre script pour lire le contenu d'un fichier dans une avariable - dans ce cas, vous avez besoin que chaque fichier ne contienne qu'une seule ligne, avec seulement la valeur que vous voulez pour cette variable spécifique. Dans l'exemple ci-dessus, vous divisez le fichier d'entrée en un fichier avec le nom (disons, name.in ) et un avec l'âge (disons, age.in ), et modifiez le read name y read age lignes vers name=$(cat name.in) y age=$(cat age.in) respectivement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X