Я пытаюсь создать bash-скрипт, который считает перевод строки во входных данных. Первый оператор if (switch $ 0) работает нормально, но проблема в том, что я пытаюсь заставить его прочитать WC файла в терминальном аргументе.
например.
~ $ ./script.sh
1
2
3
4
(пользователь нажимает CTRL + D)
показать количество слов здесь # ответ 5 - отлично работает
например.
~ $ .script1.sh
WC здесь - (5)
~ $ успешно перенаправляет стандартный ввод из файла
но
например
~ $ ./script1.sh script1.sh script2.sh
WC отображается здесь для script1.sh
WC отображается здесь для script2.sh
НИЧЕГО
~ $
проблема, на мой взгляд, является вторым оператором if, вместо того, чтобы выполнить скрипт в терминале, он переходит к оператору if и ожидает ввода пользователя и не возвращает оператор echo.
Любая помощь будет принята с благодарностью, поскольку я не могу понять, почему она не будет работать без оператора ~ $ <. </p>
#!/bin/bash
#!/bin/sh
read filename ## read provided filename
USAGE="Usage: $0 $1 $2..." ## switch statement
if [ "$#" == "0" ]; then
declare -i lines=0 words=0 chars=0
while IFS= read -r line; do
((lines++))
array=($line)
((words += ${#array[@]}))
((chars += ${#line} + 1)) # add 1 for the newline
done < /dev/stdin
fi
echo "$lines $words $chars $filename" ## filename doesn't print, just filler
### problem if statement####
if [ "$#" != "0" ]; then # space between [] IS VERY IMPORTANT
declare -i lines=0 words=0 chars=0
while IFS= read -r line; do
lines=$( grep -c '\n'<"filename") ##should use grep -c to compare only new lines in the filename. assign to variable line
words=$( grep -c '\n'<"filename")
chars=$( grep -c '\n'<"filename")
echo "$lines $words $chars"
#lets user press CTRL+D to end script and count the WC
fi