πŸ“œ Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° построчно Π½Π° Bash

ΠΊΠ°ΠΊ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π½Π° Linux ΠΏΠΎ строкам

by itisgood

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ситуации, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ скрипт шСлла для чтСния Ρ„Π°ΠΉΠ»ΠΎΠ² построчно.

Π’ этом руководствС я расскаТу ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… способах чтСния Ρ„Π°ΠΉΠ»ΠΎΠ² построчно Π² скриптах bash.

Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° построчно Π½Π° bash

Π’ этом руководствС ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π²Π°ΠΌ ΠΎ Π΄Π²ΡƒΡ… способах написания сцСнария bash, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ смоТСтС Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» построчно:

  • ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ read с Ρ†ΠΈΠΊΠ»ΠΎΠΌ while
  • ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cat с Ρ†ΠΈΠΊΠ»ΠΎΠΌ while

Для простоты понимания ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой тСкстовый Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ LHB.txt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

1. Ubuntu
2. Arch
3. openSUSE
4. Fedora
5. Slackware

1. ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ read с Ρ†ΠΈΠΊΠ»ΠΎΠΌ while

Как слСдуСт ΠΈΠ· названия ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, здСсь ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ read с Ρ†ΠΈΠΊΠ»ΠΎΠΌ while (разумССтся, Π²Π½ΡƒΡ‚Ρ€ΠΈ скрипта).

Π‘Π½Π°Ρ‡Π°Π»Π° создайтС ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ простой Ρ„Π°ΠΉΠ» скриптас ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

nano read.sh

И Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

#!/bin/bash

file="LHB.txt"

while read -r line; do
    echo -e "$line\n"
done <$file 

Π’ΠΎΡ‚,

  • file=”LHB.txt”: Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, с ΠΊΠ°ΠΊΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ я Ρ…ΠΎΡ‡Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈ Π² ΠΌΠΎΠ΅ΠΌ случаС это LHB.txt.
  • while read -r line; do: ЗапускаСт Ρ†ΠΈΠΊΠ» while ΠΈ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строки ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΏΠΎΠΊΠ° Π½Π΅ останСтся Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ строки для чтСния, Π° Ρ„Π»Π°Π³ -r ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ Π² строках.
  • echo -e “$line\n”: Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° каТдая строка, ΠΈ каТдая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π΅Π½Π° ΠΎΠ΄Π½ΠΎΠΉ пустой строкой.
  • done < “$file”: ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ Π²Π²ΠΎΠ΄ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Ρ†ΠΈΠΊΠ» while.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ скрипт:

./read.sh

2. ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cat с Ρ†ΠΈΠΊΠ»ΠΎΠΌ while

Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cat для чтСния Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎ сдСлаСт Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ†ΠΈΠΊΠ»Π° простой для понимания.

Π’ΠΎΡ‚ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

#!/bin/bash

cat LHB.txt | while IFS= read -r line; do
    echo "$line"
    echo   # Print a blank line
done

Π’ΠΎΡ‚,

  • cat LHB.txt |: Π§ΠΈΡ‚Π°Π΅Ρ‚ содСрТимоС Ρ„Π°ΠΉΠ»Π° LHB.txt ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² piped Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.
  • while IFS= read -r line; do: Π§ΠΈΡ‚Π°Π΅Ρ‚ строки ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° LHB.txt ΠΈ. IFS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сохранСния Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов.
  • echo “$line”: Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку, Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽΡΡ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ line.

см. Ρ‚Π°ΠΊΠΆΠ΅:

 

Loading

You may also like

Leave a Comment