#!/bin/ksh
#
# Kysytaan kayttajalta tiedostoa ja kyselya jatketaan
# kunnes kayttaja antaa tiedoston joka on olemassa.
while true
do
echo "Anna jokin tiedosto:"
read file
if [[ -a "$file" ]]
then
break
else
echo "Antamaasi tiedostoa ei ole olemassa"
fi
done
# Testataan onko kaytattajalla lukuoikeus tiedostoon.
# Allaoleva riittaa tehtavan ratkaisuksai
if [ -r $file ]
then
echo "Sinulla ($LOGNAME) on lukuoikeus tiedostoon $file"
else
echo "Sinulla ($LOGNAME) ei ole lukuoikeutta tiedostoon $file"
fi
Teht 2
#! /bin/sh
# Tehtava 2
# Ratkaisu 1
# Funktio, joka laskee Fibonaccin sarjan summan
# annettuun termiin asti.
# "Erikoistapaukset n=1 ja n=2 kasitellaan erikseen"
#
# Lisatehtavana on miettia miten alla esitettetyja ratkaisuja
# saa siistittya.
#
n=5
if [ $1 -gt 0 ]; then
n=$1
fi
fibonacci_summa ()
{
i=3
x0=1
x1=1
x2=`expr $x1 + $x0`
s=`expr $x0 + $x1 + $x2`
if [ $1 -eq 1 ] ; then
echo $x0
return
elif [ $1 -eq 2 ] ; then
echo $x2
return
fi
while [ $i -lt $1 ]
do
x0=$x1
x1=$x2
x2=`expr $x1 + $x0`
s=`expr $s + $x2`
i=`expr $i + 1`
done
echo $s
}
summa=`fibonacci_summa $n`
echo "Fibonaccin sarjan $n ensimmäisen alkion summa on $summa"
echo ""
# Ratkaisu 2.
# Tulostetaan Fibonaccin sarjan termeja haluttu
# maara
fibonacci_termit ()
{
i=3
x0=1
x1=1
x2=`expr $x1 + $x0`
if [ $1 -eq 1 ] ; then
echo "Fibonaccin sarjan ensimmainen termi on $x0"
return
elif [ $1 -eq 2 ] ; then
echo "Fibonaccin sarjan ensimmainen termi on $x0"
echo "Fibonaccin sarjan toinen termi on $x1"
return
else
echo "Fibonaccin sarjan ensimmainen termi on $x0"
echo "Fibonaccin sarjan toinen termi on $x1"
while [ $i -le $1 ]
do
echo "Fibonaccin sarjan $i:s termi on $x2"
x0=$x1
x1=$x2
x2=`expr $x1 + $x0`
i=`expr $i + 1`
done
fi
}
fibonacci_termit $n
Teht 3
#!/bin/ksh
hak=/etc
links=0
for f in $hak/*
do
if [[ -L $f ]]
then
links=`expr $links + 1`
fi
done
echo "Loytyi $links kappaletta symbolisia linkkejä hakemistosta $hak"
Teht 4
#! /bin/sh
# Tehtava 4
IFS=":"
while read user test userid groupid name homedir shll
do
if [ $userid -lt 100 ]
then
continue
else
echo "Prosessing user $user"
chown $userid.$groupid $homedir
chmod -R 700 $homedir
ls -ld $homedir
fi
done < passwd
Teht 5
#!/bin/sh
exec >/root/shells.log 2>&1
IFS=":"
while read a a a a a a shll
do
if [ -f "$shll" ]
then
continue
else
target=${shll##*/}
echo $target
echo $shll
case "$target" in
csh|tcsh)
ln -s /bin/csh $shll
;;
ksh|zsh)
ln -s /bin/zsh $shll
;;
sh|bash)
ln -s /bin/sh $shll
;;
*)
continue
;;
esac
fi
done