Sie sind auf Seite 1von 17

LAB 1.

1
//////////////////////////////////////////////////
#!/bin/bash

a=$1

b=$2

if [[ "$a" = "$b" ]]

then echo "a = b"

else echo "a <> b"

fi
//////////////////////////////////////////////////
LAB 1.2
//////////////////////////////////////////////////
#!/bin/bash

a=$1

b=$2

c=$3

if [[ "$b" -gt "$a" ]]

then a=$b

fi

if [[ "c" -gt "$a" ]]

then a=$c

fi

echo "$a"
//////////////////////////////////////////////////
LAB 1.3
//////////////////////////////////////////////////
#!/bin/bash

b=""

read a

b="$b$a"

while [[ "$a" != "q" ]]

do

read a

b="$b$a"

if [[ "$a" == "q" ]]
then break

fi

done

echo "$b"
//////////////////////////////////////////////////
LAB 1.4
//////////////////////////////////////////////////
#!/bin/bash

count=1

read a

while [[ "$a"%2 != 0 ]]

do read a

let count=$count+1

let m=$a%2

if [[ "$m" == "0" ]]

then break

fi

done

echo "$count"
//////////////////////////////////////////////////
LAB 1.5
//////////////////////////////////////////////////
#!/bin/bash

echo "Vyberite deystvie:"

echo "1 = nano"

echo "2 = vi"

echo "3 = links"

echo "4 = exit"

read a

case $a in

1 )

/usr/bin/nano

;;
2 )

/usr/bin/vim

;;

3 )

/usr/bin/links

;;

4 )

echo "Goodbye"

exit 0

;;

esac
//////////////////////////////////////////////////
LAB 1.6
//////////////////////////////////////////////////
#!/bin/bash

if [[ "$HOME" == "$PWD" ]]

then echo "$HOME"

exit 0

fi

if [[ "$HOME" != "$PWD" ]]

then echo "ERROR"

exit 1

fi
//////////////////////////////////////////////////
LAB 2.1
//////////////////////////////////////////////////
#!/bin/bash

grep -E -r -h "^ACPI.*" /var/log/ > errors.log

grep -E -r -h "^.*[:alnum:]\.[:alpha:]" /home/user/shvalova/lab2/errors.log


//////////////////////////////////////////////////
LAB 2.2
//////////////////////////////////////////////////
#!/bin/bash

inf="\\(II\\)"

war="\\(WW\\)"

grep -E -h -s $war /var/log/Xorg.0.log | sed -E "s/$war/Warning: /" > full.log


grep -E -h -s $inf /var/log/Xorg.0.log | sed -E "s/$inf/Information: /" >> full.log
//////////////////////////////////////////////////
LAB 2.3
//////////////////////////////////////////////////
#!/bin/bash

mail="[a-zA-Z0-9_.]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+"

grep -E -h -s -o -w $mail /etc/* | awk '{printf("%s, ",$1)}' | sed -E


"s/$mail,\s$//g" > emails.lst
//////////////////////////////////////////////////
LAB 2.4
//////////////////////////////////////////////////
#!/bin/bash

p="*.bash"

grep -E -o -h -s "^#!\s*/\S+$" $p | sed -E "s/^#!\s*(\/\S+)$/\1/" | awk


'{w=tolower($1); a[w]++} END {for (k in a) {print k, a[k]}}' | sort -n -r -k 2 |
sed 1q | tr -d "[0-9]$"
//////////////////////////////////////////////////
LAB 2.5
//////////////////////////////////////////////////
#!/bin/bash

awk '{ FS=":"; print $3, $1;}' /etc/passwd | sort -n -k 1


//////////////////////////////////////////////////
LAB 2.6
//////////////////////////////////////////////////
#!/bin/bash

cat /var/log/*.log | wc –l
//////////////////////////////////////////////////
LAB 2.7
//////////////////////////////////////////////////
#!/bin/bash

man bash | grep -o -i "[a-zA-Z]\{4,\}" | tr "[:upper:]" "[:lower:]" | sort | uniq


-c | sort -r -n | head -3
//////////////////////////////////////////////////
LAB 3.1
//////////////////////////////////////////////////
#!/bin/bash

ps -U user -o pid,command | tail -n +2 | sed -r "s/\s*([0-9]+)\s(.+)$/\1:\2/" >


ans1.tmp
//////////////////////////////////////////////////
LAB 3.2
//////////////////////////////////////////////////
#!/bin/bash

ps -Ao pid,stime | tail -n +2 | sort -r -k2 | head -9 | sort -k2 | head -1 | awk
'{print $1}'
//////////////////////////////////////////////////
LAB 3.3
//////////////////////////////////////////////////
#!/bin/bash
for i in $(ls /proc/ | grep "[0-9]\+")

do

echo $i | readlink /proc/$i/exe | grep "/sbin" | echo $i >> ans3.tmp

done
//////////////////////////////////////////////////
LAB 3.4
//////////////////////////////////////////////////
#!/bin/bash

ps -A -o pid | tail -n +2 | gawk '{file1="/proc/"$1"/statm"; getline f<file1; close


(file1); split(f, a); print $1, ":", a[2]-a[3]}' | tr -d " " | sort -r -n -t ":"
-k2 > ans4.tmp
//////////////////////////////////////////////////
LAB 3.5
//////////////////////////////////////////////////
#!/bin/bash

status=""

for pid in $(ps -A -o pid | tail -n +2)

do

file="/proc/"$pid"/status"

file1="/proc/"$pid"/sched"

ppid=$(grep -E -h -s -i "ppid:\s(.+)" $file | grep -o "[0-9]\+")

sleepavg=$(grep -E -h -s -i "avg_atom(.+)" $file1 | grep -o "[0-9.]\+")

if [[ -z $sleepavg ]]

then sleepavg=0

fi

if [[ $ppid != "" ]]

then status=$status"ProcessID="$pid" : Parent_ProcessID="$ppid" :


Average_Sleeping_Time="$sleepavg$'\n'

fi

done

echo "$status" | sort -t " " -k2 > ans5.tmp


//////////////////////////////////////////////////
LAB 3.6
//////////////////////////////////////////////////
#!/bin/bash

ppid=0

sleepavg=0
count=0

b=""

while read a

do

if [[ -n $a ]]

then

newppid=$(echo $a | grep -E -h -s -i -o "Parent_ProcessID=[0-9]+" | grep -o "[0-9]\


+")

newsleepavg=$(echo $a | grep -E -h -s -i -o "Average_Sleeping_Time=[0-9.]+" | grep


-o "[0-9.]\+" | awk '{printf("%s",$1)}')

if [[ $ppid == $newppid ]]

then sleepavg=$(echo "$sleepavg+$newsleepavg" | bc -l -q)

count=$(echo "$count+1" | bc -l -q)

else

sleepavg=$(echo "$sleepavg/$count" | bc -l -q)

if [[ -n $b ]]

then

b=$b"Average_Sleeping_Children_of_ParentID="$ppid" is "$sleepavg$'\n'

fi

sleepavg=$newsleepavg

ppid=$newppid

count=1

fi

b=$b$a$'\n'

fi

done < ans5.tmp

sleepavg=$(echo "$sleepavg/$count" | bc -l -q)

if [[ -n $b ]]

then

b=$b"Average_Sleeping_Children_of_ParentID="$ppid" is "$sleepavg$'\n'

fi
echo "$b" > ans6.tmp
//////////////////////////////////////////////////
LAB 4.1
//////////////////////////////////////////////////
#!/bin/bash

d=$(date '+%d.%m.%y_%H:%M:%S')

mkdir ~/test && echo "catalog test was created successfully" >> ~/report.tmp &&
touch ~/test/$d.tmp

ping -c 1 www.net_nikogo.ru || echo "ERROR" >> ~/report.tmp


//////////////////////////////////////////////////
LAB 4.2
//////////////////////////////////////////////////
#!/bin/bash

at now+2minutes -f ./script1.bash

tail -n 0 -f ~/report.tmp
//////////////////////////////////////////////////
LAB 4.3
//////////////////////////////////////////////////
#!/bin/bash

echo "*/5 * * * 2 script1.bash" | crontab


//////////////////////////////////////////////////
LAB 4.4
//////////////////////////////////////////////////
#!/bin/bash

nice -n 6 ./script4dop.bash&

nice -n 0 ./script4dop.bash&

Дополнительный файл script4dop.bash:

#!/bin/bash

x=0

while true;

do

let x=$x+1

done
//////////////////////////////////////////////////
LAB 4.5
//////////////////////////////////////////////////
#!/bin/bash

echo "+" > 5.in

./script5.bash& > 5.in

while true
do

read line

if [[ $line == "QUIT" ]]

then

exit

fi

if [[ $line != '*' ]]

then echo $line >> 5.in

else echo "M" >> 5.in

fi

done

Дополнительный файл:

#!/bin/bash

result=1

operate='+'

tail -n 0 -f 5.in | while true

do

read line

case $line in

'+')

operate='+'

echo "Adding numbers"

;;

M)

operate='*'

echo "Multiplying numbers"

;;

[0-9]*)

if [[ $operate == '+' ]]
then

let result=$result+$line

else

let result=$result\*$line

fi

echo "$operate$line = $result"

;;

*)

echo "Error!"

;;

esac

done
//////////////////////////////////////////////////
LAB 4.6
//////////////////////////////////////////////////
#!/bin/bash

./script6dop.bash&

while true

do

read line

case $line in

"term")

echo "SEND TERM"

kill -SIGTERM $(cat mypid)

exit

;;

esac

done

Дополнительный файл:

#!/bin/bash

echo $$ > mypid

echo "RUNNING"
i=0

exiting='0'

sigterm()

exiting='1'

trap 'sigterm' SIGTERM

while true

do

case $exiting in

0)

echo $i

let i=$i+1

;;

1)

echo "STOP"

exit

;;

esac

sleep 1

done
//////////////////////////////////////////////////
LAB 4.7
//////////////////////////////////////////////////
#!/bin/bash

./script7dop.bash&

while true

do

read line

case $line in

"term")
kill -SIGTERM $(cat mypid)

exit

;;

"+")

kill -USR1 $(cat mypid)

;;

"*")

kill -USR2 $(cat mypid)

;;

esac

done

Дополнительный файл:

#!/bin/bash

echo $$ > mypid

i=1

mode="+"

sigterm()

echo "STOP"

exit

user1()

mode="+"

user2()

mode="*"

trap 'sigterm' SIGTERM


trap 'user1' USR1

trap 'user2' USR2

while true

do

case $mode in

"+")

let i=$i+2

;;

"*")

let i=$i*2

;;

esac

echo $i

sleep 1

done
//////////////////////////////////////////////////
LAB 5.1
//////////////////////////////////////////////////
#!/bin/bash

scriptName=$1

homeTrash=$HOME/.trash

homeLog=$HOME/trash.log

if [ $# -ne 1 ]; then

exit 1

fi

if [ -d $homeTrash ]; then :

else

mkdir $homeTrash

fi

currentTrashFile=$(date +%s)

ln $scriptName "$homeTrash/$currentTrashFile"
rm $scriptName

if [ -e $homeLog ];

then :

else

touch $homeLog

fi

echo "$PWD/$scriptName:$currentTrashFile" >> $homeLog


//////////////////////////////////////////////////
LAB 5.2
//////////////////////////////////////////////////
#!/bin/bash

restFile=/home/user/panyavin/lab5/$1

for i in $(grep -h $1 $HOME/trash.log)

do

glPath=$(echo $i | awk -F ":" '{print $1}')

trFile=$(echo $i | awk -F ":" '{print $2}')

if [[ $restFile == $glPath ]]

then

rmFile=$HOME/.trash/$trFile

if [ $# -ne 1 ]; then

echo "usage: `basename $0` file" 1>&2

exit 1

fi

if [ -e $rmFile ];

then

echo "Do you want to restore file - $glPath ?"

read answer

if [[ $answer == "yes" ]]

then

if [ -d $(dirname $glPath) ]

then

if [[ -e $glPath ]]
then

echo "Dublicate! Remove your file"

read newName

ln "$rmFile" "$(dirname $glPath)/$newName"

else

ln $rmFile $glPath

fi

else

echo "$(dirname $glPath) has been removed!"

ln $rmFile $HOME/$1

fi

rm $rmFile

#cat $HOME/trash.log | sed -i "/$trFile/d" $HOME/trash.log

grep -v $trFile $HOME/trash.log > $HOME/trash0.log

mv $HOME/trash0.log $HOME/trash.log

fi

fi

fi

done
//////////////////////////////////////////////////
LAB 5.3
//////////////////////////////////////////////////
#!/bin/bash

backupParentDir="$HOME/"

sourceDir="$HOME/source/"

todayDate=$(date "+%F")

dircreated=0

backupPrefix="Backup-"

backupReport="$HOME/backup-report"

todaySec=$(date --date=$todayDate "+%s")

lastbackupDir=$(ls $backupParentDir -1 | grep -E "Backup-[0-9]{4}-[0-9]{2}-[0-9]


{2}" | sort -r -k2 | head -1)
lastbackupSec=$(date --date=$(ls $backupParentDir -1 | grep -Eo "Backup-[0-9]{4}-
[0-9]{2}-[0-9]{2}" | sort -r -k2 | head -1 | sed "s/^Backup-//") "+%s")

let dateDiff=($todaySec\-$lastbackupSec)/60/60/24

if [ "$dateDiff" -le 7 ]

then

currentbackupDir=$backupParentDir$lastbackupDir"/"

else

mkdir $backupParentDir$backupPrefix$todayDate

currentbackupDir=$backupParentDir$backupPrefix$todayDate"/"

dircreated=1

fi

if [ "$dircreated" == "1" ]

then

echo "backup created on "$todayDate" in directory "$sourceDir" Files copied :" >>
$backupReport

for file in $(ls $sourceDir -1)

do

cp $sourceDir$file $currentbackDir$file

echo $file >> $backupReport

done

else

echo "Updating backup in directory "$currentbackDir". Date: "$todayDate"" >>


$backupReport

for file in $(ls $sourceDir -1)

do

currentfile=$currentbackupDir$file

if [ -f currentfile ];

then

source_size=$(stat $sourceDir$file -c%s)

actual_size=$(stat $currentfile -c%s)

if [[ "$source_file" != "$actual_size" ]];


then

mv $currentfile $currentfile"."$todayDate

cp $sourceDir$file $currentfile

echo "New version of file "$file" found. Old version moved to "$file.$todayDate""
>> $backupReport

fi

else

cp $sourceDir$file $currentfile

echo "New file "$file" copied" >> $backupReport

fi

done

fi

exit 1
//////////////////////////////////////////////////
LAB 5.4
//////////////////////////////////////////////////
#!/bin/bash

backupParentDir="$HOME/"

restoreDir="$HOME/restore/"

backupPrefix="Backup-"

if [[ ! -d "$restoreDir" ]];

then

mkdir $restoreDir

fi

latestBackup=$(find $backupParentDir$backupPrefix* -maxdepth 0 | sort -n | tail -n


1)"/"

for file in $(ls $latestBackup -1);

do

if [ "$(echo $file | grep -Eo "Backup-[0-9]{4}-[0-9]{2}-[0-9]{2}")" == "" ];

then

if [ "$(ls $latestBack$file.* 2>/dev/null | grep -Eo "[0-9]{4}-[0-9]{2}-[0-9]{2}")"


== "" ];

then
cp $latestBackup$file $restoreDir$file

fi

fi

done

exit 1

Das könnte Ihnen auch gefallen