網頁

2017年12月2日 星期六

UNIX入門課程1061_ex7

http://erdos.csie.ncnu.edu.tw/~klim/unix-intro/unix-intro-1061.html

作業七: 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

執行結果:

 


沒有留言:

張貼留言