LINUX.ORG.RU

Прошу помощи. Нужно написать скрипт который выводит общее число строк всех файлов

 , ,


0

1

Скрипт выводит общее число строк всех файлов заданных в параметрах.Если заданный файл - директория,считается число строк во вложенных файлах. Заранее большое спасибо <3 на данный момент написал только это for i in $@ do wc -l $i if [-d «$file» ]; then



Последнее исправление: chefer23 (всего исправлений: 2)

Показывай, что ты уже написал и что конкретно у тебя не получается.

Если тебе что-то нужно, то показывай, что у тебя конкретно не получается или плати деньги, если ты хочешь, чтобы всё сделали за тебя. Раз тебе что-то нужно.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)

Чот второй раз не срабатывает, видимо вежливость мешает, а не помогает. Попробуй коротко и властно приказать в безличной форме (безличная форма это «сидеть, лежать, рядом»), в тот раз сработало.

Jameson ★★★★★
()
Ответ на: комментарий от chefer23

https://www.linux.org.ru/help/markdown.md

Научись оформлять код. Никто не будет ломать глаза, люди просто не захотят тебе помогать.

    if [ -d $i ]; then 

Старайся использовать [[ и ]], вместо [ и ]. Это убережёт от ошибок в некоторых случаях. Подробности:https://www.opennet.ru/docs/RUS/bash_scripting_guide/x2565.html

      cd $i
      cat * >> ~/strk
      cd ..

Забудь про «cd». Это лишнее движение. Засунь $i сразу в «cat» к шаблону. И у тебя шаблон не учитывает dot-файлы, это в рамках ТЗ?

     if [ -d $i ]; then 
         cd $i
         cat * >> ~/strk
         cd ..
     else 
         cat $i >> ~/stroki

Почему пишешь в два файла, «strk» и «stroki», а не в один? Зачем тебе вообще постоянно писать в файлы? Считай тут же через «wc» и плюсуй результат в переменную, а после цикла делай с этой переменной что хочешь.

И у тебя в ТЗ не определено, что будет, если в директории окажется вложенная директория? Её игнорировать или идти в рекурсию?

Пока примерно так:

#!/bin/bash
for i in $@
do 
   if [[ -d $i ]]; then 
       LINES_COUNT="$(($LINES_COUNT + $(cat $i/* | wc -l)))"
   else 
       LINES_COUNT="$(($LINES_COUNT + $(cat /* | wc -l)))"
   fi  
done
echo "${LINES_COUNT}"
basarga
()
Последнее исправление: basarga (всего исправлений: 1)