The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
помогите написать небольшую программу под shell, !*! garilla, 23-Май-09, 16:52  [смотреть все]
Совсем недавно начал изучать это дело, возникли некоторые затруднения. Мне нужно написать программу, которая печатает конец файла. По умолчанию – 10 последних строк (получается полный аналог команды tail). Конкретно затруднение вызвало передача параметра в строку: sed -e :a -e '$q;N;11,$D;ba' text.txt (печатает последние 10 строк из text.txt)
т.е. мне нужно вместо числа подставить параметр который я передаю, как это сделать?
И еще такая проблема: нужно как-то проверить передается ли параметр вообще. Т.е. если параметр передается, то я вывожу столько строк сколько передал, а если нет то 10. Как можно определить передается ли параметр в программу?
  • помогите написать небольшую программу под shell, !*! angra, 22:25 , 23-Май-09 (1) –1
    Во-первых, студентам тут не подают
    Во-вторых, если вам задают сделать аналог tail на bash, то обычно это означает на _чистом_ bash, без всяких внешних команд типа sed. Задача в общем-то элементарная и решается на чистом bash за пять минут после чтения описания команды read
    В-третьих, почитайте man bash или abs(https://www.opennet.ru/docs/RUS/bash_scripting_guide/) на предмет использования кавычек.
    • помогите написать небольшую программу под shell, !*! garilla, 14:11 , 24-Май-09 (2)
      >Во-первых, студентам тут не подают

      Я не прошу у вас никаких подачек.
      А за ссылку на вменяемое руководство большое спасибо.


      • помогите написать небольшую программу под shell, !*! garilla, 17:33 , 24-Май-09 (3) +1
        Посмотрите кто-нибудь и оцените работоспособность, пожалуйста:

        n='wc -l text.txt'      #подсчет кол-ва строк в файле text.txt
        temp=0                  
        lines=0
        if [-n "$1"]            #проверка наличия параметра
        then lines=$1
        else lines=10
        fi
        let "$n-=$lines"        #в n записывается номер строки с которой нужно выводить текст
        while read line
        do
        let "$temp+=1"         #номер текущей строки
        if [$n -le $temp]      #если номер тукщей строки больше n
          then echo "$line"     #то эта строка выводиться на экран
        done

        • помогите написать небольшую программу под shell, !*! angra, 21:10 , 24-Май-09 (4)
          >Посмотрите кто-нибудь и оцените работоспособность, пожалуйста:

          работоспособность вообще-то оценивается пробным запуском и вы это можете сделать сами.
          >n='wc -l text.txt'      #подсчет кол-ва строк в

          А почему сразу не sed или вообще tail? Какой смысл всего остального, после использования внешней команды? Если есть желание сделать в один проход и на чистом шелле, то стоит прочитать про массивы и циклы for

  • помогите написать небольшую программу под shell, !*! tux2002, 13:23 , 29-Май-09 (5)
    #!/bin/sh

    #################аргументы##########################
    n=5 # Количество строк
    myfile="/var/log/messages" #При режиме file
    #tailmode="stdin"
    tailmode="file"
    ####################################################

    counter=0
    if [ $tailmode = "file" ]
    then
        exec 0>&- # Закрываем stdin
        exec 0<$myfile # Открываем stdin из файла
    fi

    while read line <&0
    do
        for (( i=1; i < n; i++))
        do
            lines[$i]=${lines[$i+1]}
        done
        lines[n]=$line
        let "counter++"
    done

    nr=$n

    if [ $counter -lt $n ]
    then
        nr=$counter # Если строк меньше n
    fi


    for (( i=n-nr+1; i <= n ; i++))
    do
        echo ${lines[$i]}
    done

    # В этом режиме в бесконечный цикл ожидания следующей строки
    if [ $tailmode = "file" ]
    then
        while [ true ]
        do
            while read line <&0
            do
                echo $line
            done
        done
    fi


    В качестве черновика (мож с ошибками Сами тестируйте)





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру