2010年5月12日 星期三

linux homework3

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


zmr()
{
  # x=` expr $1 $2 $3 `
  x=$(($1$2$3))
  echo result=$x
}


if [ $# -eq 3 ]
then
 case "$2" in
"+")
zmr $1 $2 $3
;;
"-")
zmr $1 $2 $3
;;
"*")
# zmr $1 $2 $3
c=` expr $1 \* $3 ` ; echo "result =$c"    
;;
"/")
if [ $3 -eq 0 ]
then 
echo "無法計算:除數不可為0 "
else
zmr $1 $2 $3
fi
;;
 esac
else
    echo "第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)"
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/sh

aa=$1
qq=$1
for vv in $@
do
    # if [ $vv -gt $aa ]
    if ((vv>aa))
    then
 aa=$vv
    elif [ $vv -lt $qq ]
 then
qq=$vv        
     fi
done
if [ $aa -eq $qq ]
then
echo "All Equal = $aa"
else
echo "max=$aa"
echo "min=$qq"
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 -5 | nl
# echo ".....共5個"


exit 0



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

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

#!/bin/sh

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

exit 0

沒有留言:

張貼留言