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