Скрипты BASH

Изучаю сейчас скриптописательство. Есть задание:

Вывод списка файлов заданного каталога с возможностью сортировки по размеру, имени, владельцу.
Отслеживание появления и исчезновения файлов, размер которых лежит в заданном диапазоне. Выводить для каждого файла признак «появился», «исчез», размер и кол-во строк в файле. Выход из цикла анализа при появлении в текущем каталоге пустого файла с именем stop.
Вывод текущего времени на экран.

Может кто нибудь, написать скрипт, чтоб я сравнил его со своим? А то мне кажется, что у меня все через ректальное отверстие сделано.

Если в переменной записана команда, например, ls -l | awk "{print $3}" то как ее теперь заставить выполниться?

0
Soi-Fong - 18 Декабрь, 2008 - 03:56
Изображение пользователя Soi-Fong.

Текст вот в таких кавычках - `` выполняется как код, значит напиши `echo $var`, и она выполнится. Это часто используют для математических вычислений с помощью bc: var3=`echo "$var1 + $var2" | bc`
вообще, сам баш - извращенный язык, вечно приходится идти на всякие ухищрения, потому что он линейный, смешан с системой и не имеет таких понятий, как пространства имен (или имеет?). По-моему, он поддерживает создание функций, я этим никогда не пользовался, но это может быть полезно.
Вот тут есть хорошая инструкция по башу.

0
Robotex - 19 Декабрь, 2008 - 02:00

Вот чего ему надо?
#!/bin/bash
i=0
for file in *
do
if [ -f $file ]
then
filenames[$i]=$file
i=`expr $i + 1`
fi
done
filescount=$i
while :
do
clear
echo -n "-------------------------- "
echo -n `date +%d.%m.%Y`
echo -n " --- "
echo -n `date +%H:%M:%S`
echo " --------------------------"
order="\$1"
desc="-r"
i=0;
j=2;
for file in *
do
if [ -f $file ]
then
var="head -$j"
filenames2[$i]=$file
fileowners[$i]=`ls -l | awk '{print $3}' | $var | tail -1`
filesizes[$i]=`ls -l | awk '{print $5}' | $var | tail -1`
lines[$i]=`wc -l $file | awk '{print $1}'`
echo "${filenames2[$i]} ${fileowners[$i]} ${filesizes[$i]} ${lines[$i]}"
i=`expr $i + 1`
fi
j=`expr $j + 1`
done
filescount2=$i
i=0
j=0
while [ $j -lt $filescount2 ]
do
if [ ${filescount[$i]} -lt ${filescount2[$j]} ]
then
echo "yest'"
i=`expr $i + 1`
fi
j=`expr $i + 1`
done
#ls -l | sort $8 $desc | awk '{print $8,$3,$5}'
echo "-----------------------------------------------------------------------------"
sleep $1
done

0
Robotex - 22 Декабрь, 2008 - 02:30

Я смотрю, башеписателей здесь не много

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры