Muszę policzyć liczbę linii w pliku, a następnie wysłać wiadomość w zależności, jeśli liczba linii jest mniejsza lub równa 20. Próbuję to zrobić w ten sposób:

touch file.txt
echo "hello" > file.txt
nr_lines = $(wc -l < file.txt)
if[$nr_lines -le 20]; then
  echo "number of lines is less than 20."
fi

Ale to nie działa. Co ja robię źle?

0
João Dias 23 marzec 2020, 20:22

2 odpowiedzi

Najlepsza odpowiedź

Robisz dużo! Istnieje tylko kilka błędów składniowych w swoim kodzie, który sprawia, że nie działa.

  1. Bash nie lubi spacji w zmiennych zadaniach
    • zmienił nr_lines = $(wc -l < file.txt) do nr_lines=$(wc -l < file.txt)
  2. Bash kocha spacje, jeśli chodzi o operatory Boolean! :)
    • zmienił [$nr_lines -le 20] do [ $nr_lines -le 20 ]
touch file.txt
echo "hello" > file.txt
nr_lines=$(wc -l < file.txt)
if [ $nr_lines -le 20 ]; then
  echo "number of lines is less than 20."
fi

Kiedy rzeczy w Bash nie działają nie, błędy składniowe są często:

  • Gdzieś dodaj / usuń spacje
  • MixUp z ' i " i `
  • Zapomniałem uciec przed znakiem specjalnym
0
Lenna 27 marzec 2020, 15:03
nr_lines = $(wc -l < file.txt)
if[$nr_lines -le 20]; then

To powinno być:

nr_lines=$(wc -l < file.txt)
if [ $nr_lines -le 20 ]; then

Chciałbym jednak jednak.

awk 'NR>=20{exit} END{if(NR<20)print "number of lines is less than 20"}' file.txt
2
oguz ismail 23 marzec 2020, 17:26