> for "$1"
> do
> [wc -l | sort -rn | head -2 | tail -1]
Цикл for
имеет небольшую синтаксическую ошибку, и квадратные скобки полностью не на месте.В любом случае вам не нужен цикл, потому что wc
принимает список аргументов имени файла.
wc -l "$1"/* | sort -rn | head -n 1
Верхняя строка, а не вторая, будет содержать файл с наибольшим количеством строк.Возможно, вы захотите добавить опцию для обрезки числа и возврата только имени файла.
Если вы хотите зациклить файлы в $1
, это будет выглядеть как
for variable in list of items
do
: things with "$variable"
done
, где list of items
может быть подстановочным выражением "$1"/*
(как указано выше), а do
... done
занимает место, где, как вы думаете, вам нужны квадратные скобки.
(Для сравнения используются квадратные скобки; [ 1 -gt 2 ]
запускает команду [
для сравнения двух чисел. Она может сравнивать множество разных вещей - строки, файлы и т. Д. ksh
также имеет более развитый вариант [[
который имеет некоторые особенности по сравнению с традиционными [
.)