Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions courses/bash/ex02/ex01.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

if [ "$#" -ne 1 ]; then
echo "Usage: $0 'pattern'"
exit 1
fi

pattern=$1

find . -type d | while read -r dir; do
# Get the relative path
rel_path=${dir#./}

if echo "$rel_path" | grep -w -q "$pattern"; then
echo "$rel_path"
fi
done
17 changes: 17 additions & 0 deletions courses/bash/ex02/ex02.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

if [ "$#" -ne 1 ]; then
echo "Usage: $0 'pattern'"
exit 1
fi

pattern=$1

find . -type d | while read -r dir; do
# Get the relative path
rel_path=${dir#./}

if echo "$rel_path" | grep -w -q "$pattern"; then
echo "$rel_path"
fi
done
30 changes: 30 additions & 0 deletions courses/bash/ex03/ex03.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/bash

if [ "$#" -ne 4 ]; then
echo "Usage: $0 filename keyword1 keyword2 keyword3"
exit 1
fi

filename=$1
keyword1=$2
keyword2=$3
keyword3=$4

if [ ! -f "$filename" ]; then
echo "File '$filename' not found!"
exit 1
fi


search_keyword() {
local keyword=$1
echo "Keyword: $keyword"
count=$(grep -c "$keyword" "$filename")
echo "Number of matches: $count"
grep -n "$keyword" "$filename" || true
echo
}

search_keyword "$keyword1"
search_keyword "$keyword2"
search_keyword "$keyword3"
15 changes: 15 additions & 0 deletions courses/bash/ex04/ex04.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

echo "Searching for pattern: $1"

if [ -z "$1" ]; then
echo "Usage: $0 pattern"
exit 1
fi

pattern="$1"

find . -type f | while read -r file; do
echo "Checking file: $file"
grep -nH "$pattern" "$file" 2>/dev/null
done
50 changes: 50 additions & 0 deletions courses/bash/ex05/ex05.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

if [ "$#" -lt 2 ]; then
echo "Usage: $0 {-m|-s|-e|-o} number1 number2 ..." >&2
exit 1
fi

operation=$1
shift

sum=0
count=0
even_sum=0
odd_sum=0

for number in "$@"; do
sum=$(echo "$sum + $number" | bc)
count=$((count + 1))
if [ $((number % 2)) -eq 0 ]; then
even_sum=$(echo "$even_sum + $number" | bc)
else
odd_sum=$(echo "$odd_sum + $number" | bc)
fi
done

case $operation in
-s)
echo "Sum: $sum"
;;
-e)
echo "Sum of even numbers: $even_sum"
;;
-o)
echo "Sum of odd numbers: $odd_sum"
;;
-m)
if [ $count -ne 0 ]; then
mean=$(echo "scale=2; $sum / $count" | bc)
echo "Mean: $mean"
else
echo "No numbers provided to calculate mean"
fi
;;
*)
echo "Invalid option. Usage: $0 {-m|-s|-e|-o} number1 number2 ..." >&2
exit 1
;;
esac

exit 0
17 changes: 17 additions & 0 deletions courses/bash/ex06/ex06.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

map() {
if [ "$#" -lt 2 ]; then
echo "Usage: map command arg1 arg2 ..."
return 1
fi

local command=$1
shift

for arg in "$@"; do
$command "$arg"
done
}


Empty file added courses/bash/ex07/kirill
Empty file.
79 changes: 79 additions & 0 deletions courses/bash/ex09/ex09.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/bin/bash

usage() {
echo "Usage: $0 [OPTIONS] FILE"
echo "Options:"
echo " -u, --url Extract URLs from the file"
echo " -e, --email Extract emails from the file"
echo " -h, --help Display this help and exit"
}

extract_urls() {
grep -oE 'https?://[^\s/$.?#].[^\s]*' "$1"
}

extract_emails() {
grep -oE '[\w._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}' "$1"
}

options=$(getopt -o ueh --long url,email,help -- "$@")
if [ $? -ne 0 ]; then
usage
exit 1
fi

eval set -- "$options"

url_flag=false
email_flag=false

while true; do
case "$1" in
-u | --url)
url_flag=true
shift
;;
-e | --email)
email_flag=true
shift
;;
-h | --help)
usage
exit 0
;;
--)
shift
break
;;
*)
usage
exit 1
;;
esac
done

is provided
if ! $url_flag && ! $email_flag; then
echo "Error: You must specify at least one option (--url or --email)."
usage
exit 1
fi


if [ $# -ne 1 ]; then
echo "Error: You must specify a file."
usage
exit 1
fi

file
file="$1"
if $url_flag; then
echo "Extracting URLs from $file:"
extract_urls "$file"
fi

if $email_flag; then
echo "Extracting emails from $file:"
extract_emails "$file"
fi
15 changes: 15 additions & 0 deletions courses/cunix/ex01/src/strlen.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include <stdio.h>
size_t my_strlen(const char *str) {
const char *s = str;
while (*s != '\0') {
s++;
}
return s - str;
}

int main() {
const char *my_string = "Hello, World!";
size_t length = my_strlen(my_string);
printf("Length of the string is %zu\n", length);
return 0;
}