помогите написать небольшую программу под 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 В качестве черновика (мож с ошибками Сами тестируйте)
|