#!/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