The OpenNET Project / Index page

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



"Тематический каталог: Bash-программирование (shell howto)"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Заметили полезную информацию ? Пожалуйста добавьте в FAQ на WIKI.
. "Bash-программирование (shell howto)" +/
Сообщение от bot (?), 28-Май-06, 14:29 
Может не туда запостил, но все равно думаю кому-то очень облегчит жизнь.
Делалось в какой-то институт, в шелл программировании не очень силен, но пришлось немного изучить, да и спасибо с некоторыми вопросами помогли добрые люди.
Вообщем вот код

root@portal11# cat lb
#!/bin/sh
#-xv # ключи для пошагового просмотра выполняемых операций

################################################################
### 1. Ввод с клавиатуры вашей фамилии в латинской транскрипции.
clear
echo Введите, пожалуйста, данные необходимые для выполнения скрипта:
while [ -z $surname ]
do
echo 1. Вашу фамилию в латинской транскрипции
read surname
done
################################################################
### 2. Ввод с клавиатуры вашей фамилии в латинской транскрипции.
work=0

while [ $work -ne 1 ]
do

while [ -z $new_dir ]
do
echo 2. Название новой \(рабочей\) директории
read new_dir
done
################################################################
### 3. Проверка, существует ли указанная папка в домашней дирек-
###    тории пользователя.
cd ~
if !([ -d $new_dir ]); then
################################################################
### 4. Создание в домашнем каталоге директории с введенным ранее
###    названием.
mkdir $new_dir
work=1
else echo Такая директория существует, введите новое имя директории:
read new_dir
fi
done
################################################################
### 5. Копирование из папки /usr/bin всех простых выполняемых
###    файлов, имеющих в своем имени первую букву моей фамилии в
###    в английской транскрипции в созданную папку.
pa=`echo $surname | cut -c1,1`
cpa="$pa*"
for i in /usr/bin/*
do
  if [ -x $i -a ! -d $i ]
  then cp /usr/bin/$cpa ~/$new_dir/
  fi
done
string=`ls ~/$new_dir/* | wc -l`
if [ $string -ne 30 ]
then
pb=`echo $surname | cut -c2,2`
cpb="$pb*"
cp /usr/bin/$cpb ~/$new_dir/
fi
################################################################
### 6. Если число скопированных файлов меньше 30, то повторяем
###    пункт 5, взяв следующую букву фамилии.
n=2
while [ $string -lt 31 ]
do
n=`expr $n + 1`
pab=`echo $surname | cut -c$n,$n`
cpab="$pab*"
cp /usr/bin/$cpab ~/$new_dir/
string=`ls ~/$new_dir/* | wc -l`
done
################################################################
### 7. Если не скопировано ни одного файла, то скопировать один
###    любой файл ненулевой длинны, имя которого содержит не
###    менее двух символов.
string=`ls ~/$new_dir/* | wc -l`
if [ $string -gt 30 ]
then
FILE=$(cd /usr/bin; ls | grep -v "^\." | grep "[a-zA-Z0-9]\{2,\}" | head -n1)
cp /usr/bin/$FILE ~/$new_dir/
fi
################################################################
### 8. Если число файлов все еще меньше 30, то создаем столько
###    копий первого файла из числа скопированных, чтобы общее
###    число файлов стало равным 30. Каждая новая копия содержит
###    в конце имени двухсимвольный суффикс с ее номером.
size=$(ls ~/$new_dir | wc -l)
count=`expr 30 - $size`
c=0
if [ $size -lt 30 ]; then
macro=$(ls ~/$new_dir | grep -v "^\." | head -n1)
until [ $c -eq $count ]
do
c=`expr $c + 1`

if [ $c -lt 10 ]; then
c="`echo 0$c | tr -d ' '`"
cp ~/$new_dir/$macro ~/$new_dir/$macro$c
fi

cp ~/$new_dir/$macro ~/$new_dir/$macro$c
done
fi
################################################################
### 9. Если число файлов больше 30, то удалить все лишние файлы,
###    оставив только 30 самых маленьких, но не пустых файлов.
count=0
size=$(ls ~/$new_dir | wc -l)
if [ $size -gt 30 ]; then
for i in $(ls -l ~/$new_dir | sort -k 5 | awk '{print $9}')
do
count=`expr $count + 1`
if [ $count -gt 29 ]; then
cd ~/; rm -f "$new_dir/$i"
fi
done
fi
################################################################
### 10. Ввод с клавиатуры имени файла, в который поместить пере-
###     чень всех файлов в нашей папке с указанием прав доступа
###     к ним, владельцев и размеров.
while [ -z $file_list ]
do
echo Введите, пожалуйста, имя файла, в который поместить перечень всех
echo файлов в Вашей папке с указанием прав доступа к ним, владельцев и размеров
read file_list
done
ls -ls $new_dir/* > ~/$new_dir/$file_list
################################################################
### 11. Сжатие файла с перечнем.
tar -cf ~/$new_dir/$file_list\.tar ~/$new_dir/$file_list
bzip2 -z -9 ~/$new_dir/$file_list\.tar
################################################################
### Конец скрипта.
root@portal11#

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Тематический каталог: Bash-программирование (shell howto), auto_topic, 22-Мрт-06, 12:06  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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