作業七: range filter with sh
•建立一個 shell 執行檔, 名為 range, 其使用方法與上題類似, 但參數可能有二個, 可濾出上下限中間的數.
•從 stdin 讀入數字, 一行內的數可能超過一個
$ cat Numbers
6
7
8
9
10
11
12
13
14
129
37
8
119
$ cat Numbers | ./range 10 60
10
11
12
13
14
37
$ cat Numbers | ./range - 60
6
7
8
9
10
11
12
13
14
37
8
$ cat Numbers | ./range 200
$ cat Numbers | ./range 120
129
$ cat Numbers | ./range
6
7
8
9
10
11
12
13
14
129
37
8
119
$
解答:
#!/bin/bash
function Filter_Number() {
local opt=$1
local input_num=$2
case "$opt" in
0)echo $input_num
;;
1)if [ $input_num -ge $range_s ];then
echo $input_num fi
;;
2)if [ $range_s = "-" ]; then
if [ $num -le $range_e ]; then
echo $input_num
fi
elif [ $input_num -ge $range_s -a $input_num -le $range_e ];then
echo $input_num
fi
;;
esac
}
#-----main program-----
argc=$#
#echo "arg have:$argc"
case "$argc" in
0);;
1)range_s=$1
;;
2)range_s=$1 range_e=$2
;;
esac
while read data
do
#set $(echo $data)
for num in $(echo $data)
do
#echo $num
Filter_Number $argc $num
done
done
執行結果:
沒有留言:
張貼留言