Comment puis-je écrire des données dans un fichier texte automatiquement à l'aide de scripts Shell sous Linux?
J'ai pu ouvrir le fichier. Cependant, je ne sais pas comment y écrire des données.
echo "some data for the file" >> fileName
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2
text3
text4
EOM
Vous pouvez rediriger la sortie d'une commande vers un fichier:
$ cat file > copy_file
ou y ajouter
$ cat file >> copy_file
Si vous voulez écrire directement, la commande est echo 'text'
$ echo 'Hello World' > file
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
Je sais que c’est une sacrée vieille question, mais comme le PO concerne les scripts, et pour le fait que Google me l’a amenée ici, il convient également de mentionner l’ouverture de descripteurs de fichiers pour la lecture et l’écriture.
#!/bin/bash
# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red" >&3
echo "Violets are blue" >&3
echo "Poems are cute" >&3
echo "And so are you" >&3
# Close fd 3
exec 3>&-
Puis cat
le fichier sur le terminal
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
Cet exemple montre que le fichier poem.txt est ouvert en lecture et en écriture sur le descripteur de fichier 3. Il indique également que * les boîtes nix connaissent davantage de fd que simplement stdin, stdout et stderr (fd 0,1,2). En fait, ça tient beaucoup. Le nombre maximal de descripteurs de fichier pouvant être alloués par le noyau se trouve généralement dans /proc/sys/file-max
ou /proc/sys/fs/file-max
, mais il est dangereux d'utiliser un fd supérieur à 9, car il pourrait entrer en conflit avec les fd utilisés par Shell en interne. Alors ne vous embêtez pas et utilisez uniquement les valeurs 0 à 9 de fd. Si vous avez besoin de plus de 9 descripteurs de fichier dans un script bash, vous devriez quand même utiliser un autre langage :)
Quoi qu'il en soit, les fd peuvent être utilisés de nombreuses manières intéressantes.
J'aime cette réponse:
cat > FILE.txt <<EOF
info code info
...
EOF
mais suggérerait cat >> FILE.txt << EOF
si vous voulez simplement ajouter quelque chose à la fin du fichier sans effacer ce qui existe déjà
Comme ça:
cat >> FILE.txt <<EOF
info code info
...
EOF
Déplacement de mon commentaire comme réponse, comme demandé par @lycono
Si vous devez le faire avec les privilèges root, procédez comme suit:
Sudo sh -c 'echo "some data for the file" >> fileName'
Pour les environnements où les documents sont indisponibles (Makefile
, Dockerfile
, etc.), vous pouvez souvent utiliser printf
pour une solution raisonnablement lisible et efficace.
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
Peut aussi utiliser ici document et vi, le script ci-dessous génère un fichier FILE.txt avec 3 lignes et une interpolation variable
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
Ensuite, le fichier aura 3 lignes comme ci-dessous. "i" consiste à démarrer le mode vi et à fermer le fichier avec Esc et ZZ.
#This is my var in text file
var = Test
#Thats end of text file