diff --git a/03-bash/README.md b/03-bash/README.md index 8d1c8b6..bc9b4a6 100644 --- a/03-bash/README.md +++ b/03-bash/README.md @@ -1 +1,156 @@ +<<<<<<< HEAD +======= +# Bash + +## Manuals +- [Advanced bash-scripting guide](http://www.tldp.org/LDP/abs/html/index.html) +- [Bash Reference Manual](https://www.gnu.org/software/bash/manual/) +- [ksh Reference Manual](http://www.bolthole.com/solaris/ksh.html) + + +## Завдання 1 + +### ЗБИРАЄМО ДАНІ ПРО ПЛАТФОРМУ + +##### Створіть bash скрипт `task1.sh`, що збирає базову інформацію про обладнання, операційну систему та конфігурацію мережевих інтерфейсів. + +1. Скрипт повинен мати назву `task1.sh` + і має бути завантажений у GitHub репозиторій GlobalLogic; + +2. Скрипт повинен запускатися командою: + ```bash + ./task1.sh [-h|--help] [-n num] [file] + ``` + де `num` - кількість файлів із результатами, + `file` - шлях та ім'я файла, у який треба записати результат; + наприклад: `task1.sh -n 9 ./test/info/info.txt` + +3. Скрипт повинен обробляти вказані йому при запуску ключі та параметри; + +4. Параметр для ключа `-n` повинен бути цілим числом більшим за 1; + +5. Якщо при запуску вказано ключ `-h` або `--help`, + скрипт повинен вивести лише довідкову інформацію + та завершити свою роботу з успішним результатом; + +6. Якщо хоча б один ключ або параметр вказано неправильно, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +7. Якщо у користувач встановив українську мову локалізації, + скрипт повинен виводити інформацію про помилки українською мовою. + +8. Зібрані дані скрипт повинен записувати у файл, який вказано при запуску, + або у файл `~/bash/task1.out`, якщо при запуску файл не вказано; + +9. Якщо потрібні директорії ще не існують, + скрипт повинен її автоматично створити; + +10. Якщо директорії створити не вдалося, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +11. Якщо файл із вказаним іменем (або іменем `task1.out`) вже існує, + цей файл необхідно перейменувати у файл: `файл-yyyymmdd-nnnn`, де + `файл` - вказане при запуску ім'я файла (або `task1.out`), + `yyyymmdd` - рік, місяць, день перейменування файла, + `nnnn` - номер перейменованого протягом дня файла, починаючи з `0000`; + +12. Якщо при запуску вказано ключ `-n`, + скрипт повинен залишити у піддиректорії лише вказану кількість нових перейменованих файлів із вказаним іменем, + а усі старі файли - видалити; + +13. Приклад файла з даними про платформу: +``` +Date: Sat, 07 Jul 2018 16:18:06 +0300 +---- Hardware ---- +CPU: "Intel(R) Celeron(R) CPU E1400 @ 2.00GHz" +RAM: 2048 MB +Motherboard: "ASUSTeK Computer INC", "P5KPL-AM/PS" +System Serial Number: MT7089K12013428 +---- System ---- +OS Distribution: "CentOS release 6.10 (Final)" +Kernel version: 2.6.32-754.el6.x86_64 +Installation date: Wed Sep 9 14:35:22 2015 +Hostname: ws267.se.nure.ua +Uptime: 1:49 +Processes running: 194 +User logged in: 3 +---- Network ---- +lo: 127.0.0.1/8 +eth0: 192.168.123.231/24 +----"EOF"---- +``` + +14. Значення та розділи (Hardware, System, Network) у файлі + повинні йти лише у вказаному порядку + і у вказаному (включно з лапками) вигляді; + +15. Значення `Motherboard` та `System Serial Number` + потрібно формувати із отриманих з допомогою утиліти `dmidecode` параметрів: + - baseboard-manufacturer, + - baseboard-product-name, + - system-serial-number; + +16. Якщо якесь значення отримати не вдалося, + замість нього потрібно вказувати `Unknown`; + +17. Інформацію про параметри налаштування мережевих інтерфейсів + потрібно збирати незалежно від їх стану та кількості; + +18. Для кожного інтерфейсу повинна виводитися інформація про його IP адресу та мережеву маску; + +19. Якщо IP адресу та маску для інтерфейсу не встановлено, + замість них має виводитися `-/-` + + +## Завдання 2 + +### ВСТАНОВЛЮЄМО ПРОГРАМУ + +##### Створіть bash скрипт `task2.sh`, що встановлює створену в завданні 1 програму в систему. + +1. Скрипт повинен мати назву `task2.sh` + і має бути завантажений у GitHub репозиторій GlobalLogic; + +2. Скрипт повинен запускати користувач root командою: `./task2.sh` + +3. Якщо при запуску вказано ключ `-h` або `--help`, + скрипт повинен вивести лише довідкову інформацію + та завершити свою роботу з успішним результатом; + +4. Якщо ключі або параметри вказано неправильно, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +5. Якщо у користувач встановив українську мову локалізації, + скрипт повинен виводити інформацію про помилки українською мовою; + +6. Скрипт повинен встановити створену в завданні 1 програму в директорію `/usr/local/bin`; + +7. Якщо директорія ще не існує, скрипт повинен її автоматично створити; + +8. Якщо директорію створити не вдалося, + скрипт повинен вивести інформацію про помилку в стандартний потік помилок + і завершити свою роботу із невдалим результатом; + +9. Скрипт повинен автоматично внести зміни у конфігураційні файли системи + таким чином, щоб після інсталяції програми, + будь-який користувач міг її запустити командою: `task1.sh` + +10. Перед внесенням змін, скрипт повинен створити резервні копії конфігураційних файлів + з іменами у вигляді: `файл-yyyymmdd-nnnn`, де + `файл` - ім'я конфігураційного файла, + `yyyymmdd` - рік, місяць, день створення резервної копії, + `nnnn` - номер створеної протягом дня резервної копії, починаючи з `0000`; + +11. Резервні копії конфігураційних файлів мають знаходитися у тій самій директорії, + що і самі файли; + +12. Після встановлення програми, ніхто з користувачів системи (крім root) + не повинен мати можливості вносити в неї зміни; + +13. Якщо програму встановлено успішно, + скрипт повинен завершити роботу з успішним результатом. +>>>>>>> main/master diff --git a/03-bash/README1.md b/03-bash/README1.md deleted file mode 100644 index 8d1c8b6..0000000 --- a/03-bash/README1.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/03-bash/addsyspath.sh b/03-bash/addsyspath.sh new file mode 100755 index 0000000..703e2db --- /dev/null +++ b/03-bash/addsyspath.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +path_to_add=/usr/local/bin + +if [ -n "$1" ] +then + path_to_add=$1 +fi + +nnn=1 +while [ 0 ] +do + pathn=$(cut -f$nnn -d":" <<< $PATH) + if [ ! -n "$pathn" ]; then + break + fi + if [ $pathn = "$path_to_add" ] + then + echo "$path_to_add already in the PATH." + exit 0 + fi + let nnn=nnn+1 +done + +echo "Adding $path_to_add to PATH..." +export PATH=$PATH:${path_to_add} + +if [ -n "$2" ] +then + cp $0 "/etc/profile.d/$2" +fi diff --git a/03-bash/task1.out b/03-bash/task1.out new file mode 100644 index 0000000..65bf4d2 --- /dev/null +++ b/03-bash/task1.out @@ -0,0 +1,15 @@ +Date: Ср, 24 окт 2018 10:54:18 +0300 +---- Hardware ---- +CPU: "Intel(R) Pentium(R) Silver N5000 CPU @ 1.10GHz" +RAM: 4096 MB +Motherboard: "LENOVO", "LNVNB161216" +System serial number: PF199ZW8 +---- System ---- +OS Distribution: "Ubuntu 18.04.1 LTS" +Kernel Version: 4.19.0-rc8+ +Hostname: olegh-ideapad +---- Network ---- +enp1s0: -/- +lo: 127.0.0.1/8 +wlp2s0: 192.168.1.24/24 +---- "EOF" ---- diff --git a/03-bash/task1.sh b/03-bash/task1.sh index a9bf588..28bb956 100755 --- a/03-bash/task1.sh +++ b/03-bash/task1.sh @@ -1 +1,153 @@ #!/bin/bash +# LESSON03: task1.sh - system information + +# check lang +LNG='en' +SYS_LANG=${LANG::5} +if [ "$SYS_LANG" = "uk_UA" ] +then + LNG='ua' +fi + +# output file name +FNAME=~/bash/task1.out + +declare -i NFILES=0 + +# check and parse command line arguments +for arg +do + if [ $arg = '-h' ] || [ $arg = '--help' ] + then + if [ $LNG = 'ua' ] + then + echo 'Завдання03: учбовий скрип shell: інформація про систему' + echo 'arguments:' + echo ' -h or --help - this help' + echo ' -n N - max number of output files' + echo ' filename - path and name of file to store system information' + else + echo 'Lesson03: educative shell script: system info' + echo 'arguments:' + echo ' -h or --help - this help' + echo ' -n N - max number of output files' + echo ' filename - path and name of file to store system information' + fi + exit 0 + elif [ $NKEY ] + then + NKEY='' + if [ $arg -ge "1" ] + then + NFILES=$arg + else + if [ $LNG = 'ua' ] + then + echo 'Треба вказа3ти ціле число файлів після ключа -n' 1>&2 + else + echo 'Expected integer max file number after -n key.' 1>&2 + fi + exit 1 + fi + elif [ $arg = '-n' ] + then + NKEY='1' + else + FNAME=$arg + fi +done + +DIR="$(dirname $FNAME)" +echo "DIR is $DIR" +mkdir -p "$DIR" +if [ $? -ne 0 ] +then + if [ $LNG = 'ua' ] + then + echo "Неможливо збудувати повний путь '$DIR'." 1>&2 + else + echo "Can't create path: '$DIR'." 1>&2 + fi + exit 2 +fi + +if [ -f "$FNAME" ] +then + echo "File '$FNAME' exists. Renaming..." + # loop + NN='0000' + while [ "0" ] + do + FNAME2="$FNAME-"`date +%Y%m%d`-`printf "%04d" $NN` + #echo $FNAME2 + if [ ! -f "$FNAME2" ] + then + break; + fi + let NN=NN+1 + done + mv $FNAME $FNAME2 +fi + +if (( $NFILES > 0 )) +then + echo "NFiles = $NFILES" +#delete old files (not only for current date) +FLIST=$(ls -1 -t $FNAME-????????-????) +#skip NFILES lines, else (if any) - remove +#echo $FLIST +FILEN=0 +while read -r line +do + let FILEN=FILEN+1 + if [[ $FILEN -gt $NFILES ]] + then + echo "Removing old file '$line'..." + rm $line + fi +done <<< $FLIST +fi + +echo "Using output file '$FNAME'..." +echo -n "Date: " > $FNAME +date "+%a, %d %h %Y %T %z" >> $FNAME +echo "---- Hardware ----" >> $FNAME +CPU=$(sudo dmidecode -s processor-version) +echo "CPU: \"$CPU\"" >> $FNAME +MEMGB=$(sudo dmidecode -q | grep -e "Size: [0-9][0-9][0-9][0-9] MB") +MEMGB=$(cut -f2 -d":" <<< $MEMGB) +echo "RAM:$MEMGB" >> $FNAME +MBOARD="\"$(sudo dmidecode -s baseboard-manufacturer)\", \"$(sudo dmidecode -s baseboard-product-name)\"" +echo "Motherboard: $MBOARD" >> $FNAME +SSN=$(sudo dmidecode -s system-serial-number) +echo "System serial number: $SSN" >> $FNAME + +echo "---- System ----" >> $FNAME +OS_ABOUT=$(hostnamectl | grep "Operating System") +OS_ABOUT=${OS_ABOUT:20} +echo "OS Distribution: \"$OS_ABOUT\"" >> $FNAME +KERNEL_VER=$(uname -r) +echo "Kernel Version: $KERNEL_VER" >> $FNAME +HOST_NAME=$(hostname) +echo "Hostname: $HOST_NAME" >> $FNAME + +echo "---- Network ----" >> $FNAME +IFLIST=$(ls -1 /sys/class/net/) + +while read -r line +do + echo -n $line >> $FNAME + IPLINE=$(ip address show dev $line | grep "inet ") + if [ -n "$IPLINE" ] + then + #IPADDR=$(cut -f6 -d" " <<< $IPLINE) + IPADDR=$(awk '{ print $2}' <<< $IPLINE) + else + IPADDR="-/-" + fi + echo ": $IPADDR" >> $FNAME +done <<< $IFLIST + + +echo "---- \"EOF\" ----" >> $FNAME +echo "Done.Buy!" diff --git a/03-bash/task2.sh b/03-bash/task2.sh index a9bf588..58a3f16 100755 --- a/03-bash/task2.sh +++ b/03-bash/task2.sh @@ -1 +1,81 @@ #!/bin/bash +# INSTALLER for task1.sh + +# check lang +LNG='en' +SYS_LANG=${LANG::5} +if [ "$SYS_LANG" = "uk_UA" ] +then + LNG='ua' +fi + +# check and parse command line arguments +for arg +do + if [ $arg = '-h' ] || [ $arg = '--help' ] + then + if [ $LNG = 'ua' ] + then + echo 'Завдання03: учбовий скрип shell: інсталляція скрипта task1.sh інформації про систему' + else + echo 'Lesson03: educative shell script: system info task1.sh installator' + fi + exit 0 + else + if [ $LNG = 'ua' ] + then + echo 'Некоректні параметри командного рядка' 1>&2 + else + echo 'Illegal command line arguments' 1>&2 + fi + exit 1 + fi +done + +DIR=/usr/local/bin +PROGNAME=task1.sh + +if [ ! -f "$PROGNAME" ] +then + if [ $LNG = 'ua' ] + then + echo "Програмний файл $PROGNAME не знайдено" 1>&2 + else + echo "Can't find file $PROGAME" 1>&2 + fi + exit 1 +fi + +echo "Installing $PROGNAME into $DIR..." +mkdir -p "$DIR" +if [ $? -ne 0 ] +then + if [ $LNG = 'ua' ] + then + echo "Неможливо збудувати повний путь '$DIR'." 1>&2 + else + echo "Can't create path: '$DIR'." 1>&2 + fi + exit 2 +fi + +cp "$PROGNAME" "$DIR/" +#check copy result +if [ $? -ne 0 ] +then + if [ $LNG = 'ua' ] + then + echo "Неможливо встановити файл $PROGNAME у каталог '$DIR'." 1>&2 + else + echo "Can't install $PROGNAME into '$DIR'." 1>&2 + fi + exit 2 +fi + +#set read and execute for all. write only for owner +chmod 755 "$DIR/$RPOGNAME" + +#add $DIR to system path +./addsyspath.sh "$DIR" "path_to_task1.sh" + +echo "Done.Buy!" diff --git a/03-make/README.md b/03-make/README.md new file mode 100644 index 0000000..900f4f0 --- /dev/null +++ b/03-make/README.md @@ -0,0 +1,43 @@ +# Make + +- [Make manual](https://www.gnu.org/software/make/manual/html_node/index.html) + +## Examples +Examples are from Lectures notes: +* [make_email](make_email) - in this example we are making signed letter from parts; +* [make_simplest](make_simplest) - example of creating simple C program using gcc. + +## Homework + +0. Fix logical error in project `make_simplest` + +1. Create makefile which contains steps for cooking soup. +The rules of makefile should contains action for moving files +of changing their content in different folders like +``` +/kitchen + /table + /pot + /spoon + /knife +/dinning-room +/food-market +``` +The resources should be in files. (e.g. `potato.txt`, `carrot.txt`, `water.txt`) + +2. The cooking process should change file location or generate new files. + +3. Some or all action can be implemented using `*.sh` files like +``` +get_water_from_faucet.sh: + echo "water,cold,$1ml" >> $2 +``` +In rules we can use scipt: +``` +add_water: kitchen/table/pot + get_water_from_faucet.sh 2000 ./kitchen/table/pot +``` + +4. Target clean should remove all generated resources. + +5. Running makefile with option `-k` should generated script which can be used without make. diff --git a/03-make/cook-it/Makefile b/03-make/cook-it/Makefile new file mode 100644 index 0000000..b2e4741 --- /dev/null +++ b/03-make/cook-it/Makefile @@ -0,0 +1,20 @@ + +AMOUNT?=1 + +all: soup pilaf tea + +soup: soup.sh water meat rice fried_onion walnuts sause spices + @./soup.sh $(AMOUNT) > $@ + +fried_onion: oil onion + @./fry_onion.sh $(AMOUNT) >$@ + +pilaf: pilaf.sh water rice meat fried_onion spices + @./pilaf.sh $(AMOUNT) >$@ + +tea: water boil + @echo "Рецепт приготовления $(AMOUNT) л чая" > $@ + @./water $(AMOUNT) >>$@ + @echo "- Взять 50 гр чайного листа" >> $@ + @./boil 1 >> $@ + @echo "- Добавить сахар по вкусу. Чай готов!" >> $@ diff --git a/03-make/cook-it/boil b/03-make/cook-it/boil new file mode 100755 index 0000000..6e9928d --- /dev/null +++ b/03-make/cook-it/boil @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Положить в воду, довести до кипения и варить $1 минут" diff --git a/03-make/cook-it/fried_onion b/03-make/cook-it/fried_onion new file mode 100644 index 0000000..d87baf3 --- /dev/null +++ b/03-make/cook-it/fried_onion @@ -0,0 +1,4 @@ +- Возьмите чистую сковородку +- Налейте 50.0 мл подсолнечного масла +- Почистите лук репчатый (около 100 гр) и мелко нарежте +- Положите все на сковородку и жарте 15 минут, периодически помешивая diff --git a/03-make/cook-it/fry b/03-make/cook-it/fry new file mode 100755 index 0000000..ef564ae --- /dev/null +++ b/03-make/cook-it/fry @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Положите все на сковородку и жарте $1 минут, периодически помешивая" diff --git a/03-make/cook-it/fry_onion b/03-make/cook-it/fry_onion new file mode 100755 index 0000000..15b4ab5 --- /dev/null +++ b/03-make/cook-it/fry_onion @@ -0,0 +1,8 @@ +#!/bin/bash + +A=$1 + +echo "- Возьмите чистую сковородку" +./oil $(bc -q <<< "$A*0.5") +./onion $(bc -q <<< "$A") +./fry 15 diff --git a/03-make/cook-it/fry_onion.sh b/03-make/cook-it/fry_onion.sh new file mode 100755 index 0000000..15b4ab5 --- /dev/null +++ b/03-make/cook-it/fry_onion.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +A=$1 + +echo "- Возьмите чистую сковородку" +./oil $(bc -q <<< "$A*0.5") +./onion $(bc -q <<< "$A") +./fry 15 diff --git a/03-make/cook-it/meat b/03-make/cook-it/meat new file mode 100755 index 0000000..a299a37 --- /dev/null +++ b/03-make/cook-it/meat @@ -0,0 +1,6 @@ +#!/bin/bash + +echo "- Возмите $1 кг мяса" +echo "- Промойте мясо" +echo "- Нарежте мясо кубиками" + diff --git a/03-make/cook-it/oil b/03-make/cook-it/oil new file mode 100755 index 0000000..e19cd26 --- /dev/null +++ b/03-make/cook-it/oil @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Налейте $1 мл подсолнечного масла" diff --git a/03-make/cook-it/onion b/03-make/cook-it/onion new file mode 100755 index 0000000..0fa9b58 --- /dev/null +++ b/03-make/cook-it/onion @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Почистите лук репчатый (около $1 гр) и мелко нарежте" diff --git a/03-make/cook-it/pilaf b/03-make/cook-it/pilaf new file mode 100644 index 0000000..26d81d0 --- /dev/null +++ b/03-make/cook-it/pilaf @@ -0,0 +1,16 @@ +Рецепт приготовления 1 кг плова +- Возмите .25 кг мяса +- Промойте мясо +- Нарежте мясо кубиками +- Положите все на сковородку и жарте 10 минут, периодически помешивая +- Возьмите чистую сковородку +- Налейте 50.0 мл подсолнечного масла +- Почистите лук репчатый (около 100 гр) и мелко нарежте +- Положите все на сковородку и жарте 15 минут, периодически помешивая +- Положить в воду 150 гр промытого риса +- Положить в воду, довести до кипения и варить 10 минут +- Добавьте обжаренное мясо, лук и морковь +- Положить в воду, довести до кипения и варить 15 минут +- Добавьте соус ткемали (50 гр) +- Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу +- Добавьте зелень. Плов готов! diff --git a/03-make/cook-it/pilaf.sh b/03-make/cook-it/pilaf.sh new file mode 100755 index 0000000..25733d6 --- /dev/null +++ b/03-make/cook-it/pilaf.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +A=$1 + +echo "Рецепт приготовления $A кг плова" +./meat $(bc -q <<< "$A*0.25") +./fry 10 +./fry_onion.sh $(bc -q <<< "$A*100") +./rice $(bc -q <<< "$A*150") +./boil 10 +echo "- Добавьте обжаренное мясо, лук и морковь" +./boil 15 +./sause $(bc -q <<< "$A*50") +./spices +echo "- Добавьте зелень. Плов готов!" diff --git a/03-make/cook-it/rice b/03-make/cook-it/rice new file mode 100755 index 0000000..5a595de --- /dev/null +++ b/03-make/cook-it/rice @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Положить в воду $1 гр промытого риса" diff --git a/03-make/cook-it/sause b/03-make/cook-it/sause new file mode 100755 index 0000000..82c7b9d --- /dev/null +++ b/03-make/cook-it/sause @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Добавьте соус ткемали ($1 гр)" diff --git a/03-make/cook-it/soup b/03-make/cook-it/soup new file mode 100644 index 0000000..bf3c8a3 --- /dev/null +++ b/03-make/cook-it/soup @@ -0,0 +1,19 @@ +Рецепт приготовления 1 л супа-харчо +- Взять подходящую кастрюлю и налить .8 л очищенной воды +- Поставить кастрюлю на огонь +- Возмите .25 кг мяса +- Промойте мясо +- Нарежте мясо кубиками +- Положить в воду, довести до кипения и варить 120 минут +- Положить в воду 150 гр промытого риса +- Положить в воду, довести до кипения и варить 15 минут +- Возьмите чистую сковородку +- Налейте 50.0 мл подсолнечного масла +- Почистите лук репчатый (около 100 гр) и мелко нарежте +- Положите все на сковородку и жарте 15 минут, периодически помешивая +- Добавьте 125 гр очищенных и измельченных грецких орехов +- Положите лук и орехи в бульон +- Добавьте соус ткемали (100 гр) +- Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу +- Положить в воду, довести до кипения и варить 5 минут +- Добавьте зелень. Суп харчо готов! diff --git a/03-make/cook-it/soup.sh b/03-make/cook-it/soup.sh new file mode 100755 index 0000000..f7102da --- /dev/null +++ b/03-make/cook-it/soup.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +A=$1 + +echo "Рецепт приготовления $A л супа-харчо" +./water $(bc -q <<< "$A*0.8") +./meat $(bc -q <<< "$A*0.25") +./boil 120 +./rice $(bc -q <<< "$A*150") +./boil 15 +#./fry_onion.sh $(bc -q <<< "$A*100") +make -s -B fried_onion AMOUNT="$A*100" > /dev/null +cat fried_onion +./walnuts $(bc -q <<< "$A*125") +echo "- Положите лук и орехи в бульон" +./sause $(bc -q <<< "$A*100") +./spices +./boil 5 +echo "- Добавьте зелень. Суп харчо готов!" diff --git a/03-make/cook-it/spices b/03-make/cook-it/spices new file mode 100755 index 0000000..401788a --- /dev/null +++ b/03-make/cook-it/spices @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Добавьте хмели-сунели, красный перец, соль и прочие специи по вкусу" diff --git a/03-make/cook-it/tea b/03-make/cook-it/tea new file mode 100644 index 0000000..745d577 --- /dev/null +++ b/03-make/cook-it/tea @@ -0,0 +1,6 @@ +Рецепт приготовления 1 л чая +- Взять подходящую кастрюлю и налить 1 л очищенной воды +- Поставить кастрюлю на огонь +- Взять 50 гр чайного листа +- Положить в воду, довести до кипения и варить 1 минут +- Добавить сахар по вкусу. Чай готов! diff --git a/03-make/cook-it/walnuts b/03-make/cook-it/walnuts new file mode 100755 index 0000000..7fe8282 --- /dev/null +++ b/03-make/cook-it/walnuts @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "- Добавьте $1 гр очищенных и измельченных грецких орехов" diff --git a/03-make/cook-it/water b/03-make/cook-it/water new file mode 100755 index 0000000..70d1d7d --- /dev/null +++ b/03-make/cook-it/water @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "- Взять подходящую кастрюлю и налить $1 л очищенной воды" +echo "- Поставить кастрюлю на огонь" diff --git a/03-make/make_email/Makefile b/03-make/make_email/Makefile new file mode 100644 index 0000000..0f46d89 --- /dev/null +++ b/03-make/make_email/Makefile @@ -0,0 +1,36 @@ +#!/usr/bin/make -f + +# Author: Yevgen Kovalyov ekovalyov@gmail.com +# This Makefile generates e-mail letter from scratch + +#VARIABLES + +NAME = mr. Boss +SIGNER = mr. Signer +DATE := `LC_ALL=en_EN.utf8 date` +#$(eval export DATE=$$(sh -c "LC_ALL=en_EN.utf8 date")) + +# RULES: +# 1st rule is executed by default +letter_signed.txt: letter.txt + cp $< $@ + echo "Signed by ${SIGNER} ${DATE}" >> $@ + +header_template.txt: + echo "Dear %%NAME%%," >> $@ + +header.txt: header_template.txt + sed "-es/%%NAME%%/${NAME}/" <$< >$@ + +body.txt: + echo "Here is the letter provided for the testing purposes" > $@ + +footer.txt: + echo " best regards," > $@ + echo " mr. Sender" >> $@ + +letter.txt: header.txt body.txt footer.txt + cat $^ >$@ + +clean: + rm *.txt diff --git a/03-make/make_simplest/Makefile b/03-make/make_simplest/Makefile new file mode 100644 index 0000000..44cb891 --- /dev/null +++ b/03-make/make_simplest/Makefile @@ -0,0 +1,11 @@ +.PHONY: clean + +hello: main.o + gcc -o hello main.o -lc + +main.o: main.c + gcc -c main.c -o main.o + +clean: + -@rm *.o hello + @echo "Cleanup Done!" diff --git a/03-make/make_simplest/main.c b/03-make/make_simplest/main.c new file mode 100644 index 0000000..43ad789 --- /dev/null +++ b/03-make/make_simplest/main.c @@ -0,0 +1,6 @@ +#include + +int main(int argc, char* argv[]) { + printf("Hello kernel\n"); + return 0; +} diff --git a/03-make/read b/03-make/read deleted file mode 100644 index 8d1c8b6..0000000 --- a/03-make/read +++ /dev/null @@ -1 +0,0 @@ -