外壳打印线壳

时间:2016-02-02 22:10:12

标签: shell unix computer-science

编写一个名为print_lines.sh的脚本,它使用headtail一起打印出文件中的一组特定行。该脚本应该有三个参数:要开始的行号,要停止的行号以及要使用的文件。这是一个示例运行:

[user@localhost ~]$ print_lines.sh 7 10 /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

在此示例中,脚本打印/etc/passwd文件的第7行到第10行(包括)。您的脚本必须执行错误检查。具体来说,您需要检查以下所有内容:

  • 您获得了正确数量的参数(3)。
  • 指定的文件存在且是普通文件。
  • 指定的第一个行号小于或等于指定的最后一个行号。
  • 文件中的实际行数大于要打印的最后一行。
  • 如果这些条件中的任何一个不正确,您应该向用户打印相应的错误消息并停止。如果它们都满足了,那么你需要做一些算术运算并一起使用head和tail来打印出所请求的行。

这是我的工作,但效果不佳

filename=$1
firstline=$2
lastline=$3

i=0
exec <${filename}  # redirect file into our stdin
while read ; do    # read each line into REPLY variable
    i=$(( $i + 1 ))  # maintain line count

    if [ "$i" -ge "${firstline}" ] ; then
        if [ "$i" -gt "${lastline}" ] ; then
            break
        else
            echo "${REPLY}"
        fi
    fi
done

0 个答案:

没有答案