В общем есть вот такой вот мой скрипт:
#!/bin/bash
Int_INT()
{
let «i += 1»
echo «$i\n»
if [ "$i" -eq 6 ]
then
echo «GOOD BYE.\n»
exit 0
fi
if [ "$FLAG_INT" = 0 ]
then
echo enter mode
fi
}
i=0
FLAG_INT=0
trap Int_INT 2
if [ "$FLAG_INT" = 0 ]
then
echo hello enter mode
read mode
FLAG_INT=1
echo mode=$mode
fi
find /home/guest/zi007 -name \*.c | xargs chmod $mode
sleep 1
sleep 1
sleep 1
sleep 1
sleep 1
sleep 1
————————-
а задача,которая должна им решаться такая:
надо найти все файлы с расширение *.c и поменять права доступа на введенные.
Первые 5 прерываний игнорить, а на 6-ой прерывание вывести число файлов с измененными правади доступа.
Вот в общем -то вся запарка состоит в том,что никак не могу подсчитать
то число файлов.
Точнее сказать не знаю как это влепить в конвейер,где идет поиск файлов и изменение прав доступа к ним.
Хелп народ,буду очеь признателен!
пасиб
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Странная какая-то задача… Раз уж тебе надо поменять права на все файлы, оканчивающиеся на '.c’, то искомое тобой число — это количество таких файлов в указанной директории ;). Оно вот чему равно:
Но на самом деле, твой скрипт не выполняет приведённые тобой требования. Он завершает свою работу спустя 6 секунд после смены прав на файлы. Никаких 6-ти прерываний скрипт не ждёт.
Тебе же для решения задачи, достаточно включить 'trap’, 'read' и строку с 'find' в бесконечный цикл, и скрипт будет ждать ввода новых прав, пока не последует 6-ти прерываний:
предлагаю небольшую оптимизацию, вместо:
написать:
Упс, тут в первой строке у меня очепятка… Поправил в скрипте.
А зачем у chmod опция '+r’?
случайно осталась :)
я в командной строке с такими опциями тестировал не без-очепятность.
пасиб народ за помощь.
единственное,только вот я заменил бы
COUNT=`ls -1 /home/guest/zi007/*.c | wc -l`
на
COUNT=’find /home/guest/zi007 -name \*.c | wc -l '
ибо ls только для данного каталога,а если файлы еще и в подкаталогах, то они не находятся,вот …а так благодарен всем,кто откликнулся.
Тему завершаю вот своим скриптом:
#!/bin/bash
Int_INT()
{
let «i +=1»
if [ "$i" = 6 ]
then
echo «number of changed files = $COUNT»
echo «GOOD BYE.»
exit 0
else
echo «INT_NUM= $i»
fi
if [ "$FLAG_INT" = 0 ]
then
echo enter mode
fi
}
i=0
FLAG_INT=0
while true
do
trap Int_INT 2
if [ "$FLAG_INT" = 0 ]
then
echo enter mode
read mode
FLAG_INT=1
fi
find /home/guest/zi007 -name \*.c | xargs chmod $mode
COUNT=`find /home/guest/zi007 -name \*.c | wc -l`
done
echo «enter ^C to exit\\n»
i=5
trap INT