Unix ja shell-ohjelmointi (tie 205) Unix ja shell-ohjelmointi (tie 205)

Demo 2 vastaukset
Teht 1

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


File translated from TEX by TTH, version 2.34.
On 7 Oct 1999, 08:57.