Доброго времени суток!
Совсем недавно начал программировать под linux. По началу делал все руками.
1) Создавал каталог для проекта
2) Там создавал файлы
3) Сам писал Makefile
Захотелось автоматизировать выше описаные действия.
Получился следующий скрипт.
########################################## Фукнции скрипта ##########################################
function EnterNameFolder ()
{
# Предлагаем пользователю ввести имя директории, которую нужно создать
echo -n "Введине имя директории: "
read folder
echo
}
function AnalizName ()
{
# Проверяем корректность введенной строки:
# Запрещается использовать специальные символы.
# А именно: * ? [ ] { } > < | ; & $ ! ( ) ` ~ # \ " '
# Также запрещается испльзование пробела
local str=${1//[\*,\?,\[,\],\{,\},\>,\<,\|,\;,\&,\$,\!,\(,\),\`,\~,\#,\\,\",\',\/," "]/""}
if [ $str = $1 ]
# Если строчки одинковы
then
return 1
else
# Если строчки разные
return 0
fi
}
function CreateWriteFiles ()
{
local exe_file=""
while true
do
echo -n "Введите имя исполняемого файла: "
read exe_file
if [ -n $exe_file ]
# Если введена не пустая строка
then
AnalizName $exe_file
if [ $? -eq 0 ]
# Если указано некорректное имя файла
then
echo
echo "Вы указали не корректное имя исполняемого файла."
exe_file="main"
echo "Имя исполняемого файла установлено по умолчанию: $exe_file"
echo
fi
# Если указано корректное имя файла
# Создаем файлы и записываем в них следующее содержимое (подготавливаем шаблоны)
touch main.cpp
echo "int main()" >> main.cpp
echo "{" >> main.cpp
echo >> main.cpp
echo " return 0;" >> main.cpp
echo "}" >> main.cpp
touch Makefile
echo "main: main.o" >> Makefile
echo " g++ main.o -o $exe_file" >> Makefile
echo >> Makefile
echo "main.o: main.cpp" >> Makefile
echo " g++ -c main.cpp" >> Makefile
echo >> Makefile
echo "clean:" >> Makefile
echo " rm -rf *.o" >> Makefile
echo " rm -rf $exe_file" >> Makefile
touch ReadMe
echo "Автор: " >> ReadMe
echo "Описание: " >> ReadMe
break
fi
done
}
########################################## Начало скрипта ##########################################
while true
do
# Добавить проверку аргументов.
EnterNameFolder
if [ -n $folder ]
# Если строка не пустая.
then
AnalizName $folder
if [ $? -eq 0 ]
# Если имя директории введено некорректно.
then
echo "Вы указали неправильное имя директории. Повторите ввод."
continue
fi
# Если название директории введено правильно.
# Удостоверимя, что директории с таким именем нет.
if [ -d ~/ProgC++/$folder ]
then
echo "Дитерктория с таким именем уже существует."
echo -n "Хотите указать новое имя? (y\n) :: "
read choise
if [ $choise = "y" ]
then
continue
else
break
fi
fi
# Создаем директорию
mkdir ~/ProgC++/$folder
echo "Директории ~/ProgC++/$folder успешно создана."
echo
cd ~/ProgC++/$folder
CreateWriteFiles
break
fi
done
Хотелось бы услышать советы по оптимизации.
И, если вы делали что-то подобное, увидеть ваши варианты решения данной проблемы.
Заранее большое спасибо! smile