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?
2 odpowiedzi
Robisz dużo! Istnieje tylko kilka błędów składniowych w swoim kodzie, który sprawia, że nie działa.
- Bash nie lubi spacji w zmiennych zadaniach
- zmienił
nr_lines = $(wc -l < file.txt)
donr_lines=$(wc -l < file.txt)
- zmienił
- Bash kocha spacje, jeśli chodzi o operatory Boolean! :)
- zmienił
[$nr_lines -le 20]
do[ $nr_lines -le 20 ]
- zmienił
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
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
Podobne pytania
Powiązane pytania
Nowe pytania
bash
W przypadku pytań dotyczących skryptów napisanych dla powłoki poleceń Bash. W przypadku skryptów powłoki z błędami / błędami składniowymi, sprawdź je w programie shellcheck (lub na serwerze web shellcheck pod adresem https://shellcheck.net) przed wysłaniem tutaj. Pytania dotyczące interaktywnego korzystania z Bash częściej dotyczą tematu Super User niż Stack Overflow.