星期三, 5月 12, 2010

Shell Script HW3

Linux Programing Homework 3

1.設計一個名為mycal的script,使其可以接收三個數字參數,第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)
配合case命令,計算數字運算的結果,並將其結果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,
提示出正確的執行方式。如果中間的運算子是/,而第三個參數是0,則顯示除數不可為0
將各個運算功能分別寫成函數。

$ ./mycal 12 + 3
result = 15
$

$ ./mycal 12 - 3
result = 9
$


$ ./mycal 12 \* 3   # 注意:*為特殊符號,需加一倒斜線輸入
result = 36
$

$ ./mycal 12 / 3
result = 4
$
----


#!/bin/sh

cal()
{
if [ "$2" = "*" ]
then
   echo "result = `expr $1 \* $3`"
else
if [ "$2" = "/" -a "$3" = "0" ]
  then
   echo "無法計算:除數不可為0"
else
   echo "result = `expr $@`"
fi
fi
}
if [ -z "$3" -o -n "$4" ]
then
echo "請輸入三個參數,第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)"
else
case "$2" in
"+")
cal $@
;;
"-")
cal $@
;;
"*")
cal $1 \* $3
;;
"/")
cal $@
;;
 
esac
fi

exit 0


2.設計一個名為manymaxmin的script,使其可以接收不固定的多個數字參數,顯示數字中最大的及最小的,如果都一樣大,則顯示都一樣大。

$ ./maxmin 12 18 9 32 24 13
max = 32
min = 9
$

$ ./maxmin 15 15 15 15 15 15
All Equal = 15
$
----


#!/bin/bash

max=$1
min=$1
for x in $@
do
  if [ $x -gt $max ]
  then
      max=$x
  else
    if [ $x -lt  $min ]
    then
        min=$x
fi
fi
done
  if [ $max = $min ]
  then
      equ=$max
  echo "All Equal = $equ"
  else
  echo "max = $max"
  echo "min = $min"
  fi

exit 0


3.設計一個名為createmyfiles的script,以迴圈配合touch指令,產生十個檔案,檔名分別為myprog1.c,myprog2.c,...,myprog10.c。
----


#!/bin/sh

for ((x=1;x<=10;x++))
do
`touch myprog$x.c`
done

exit 0


4.設計一個名為lastfiles的script,顯示目前目錄中最近被修改的n個檔案檔名。

$ ./lastfiles 5
a1.txt
a3.txt
...共5個
----


#!/bin/sh

ls -t |head -$1 |nl

exit 0


5.設計一個名為mvfiles的script,可以將所有副檔名為.c檔案,副檔名更名為.cpp,更名前後的副檔名均自命令列輸入。
並將更名的結果顯示出來。

$ ./mvfiles .c .cpp
renamed myprog1.c to myprog1.cpp
....
....
$
----


#!/bin/sh

x=$1
y=$2
for file in *$x
do
mv $file `basename $file $x`$y
        echo "renamed $file to `basename $file $x`$y"
done

exit 0

沒有留言:

張貼留言