【发布时间】:2020-04-30 11:06:05
【问题描述】:
我在使用此脚本时遇到了一些问题,该脚本将文件内容从给定行号打印到指定的下一个行号。如果 START 大于 END(例如 ./script file 10 7),我需要将 START 参数的行打印回 END 参数(基本上是第 10 行,然后是第 9 8 7 行)。
#!/bin/sh
START=$1
END=$2
FILENAME=$3
ERROR="[PINCH ERROR]"
if [ $# -lt 3 ]; then
echo "$ERROR Need three arguments: Filename Start-line End-line"
exit 1
fi
if [ ! -f "$FILENAME" ]; then
echo -e "$ERROR File does not exist. \n\t$FILENAME"
exit 1
fi
if [ "$START" -gt "$END" ]; then
echo -e "$END $START"
exit 1
fi
if [ "$START" -lt 0 ]; then
echo -e "$ERROR Start line is less than 0."
exit 1
fi
if [ "$END" -lt 0 ]; then
echo -e "$ERROR End line is less than 0."
exit 1
fi
NUMOFLINES=$(wc -l < "$FILENAME")
ENDDIFF=$(( NUMOFLINES - END ))
if [ "$START" -lt "$ENDDIFF" ]; then
< "$FILENAME" head -n $END | tail -n +$START
else
< "$FILENAME" tail -n +$START | head -n $(( END-START+1 ))
fi
exit 0
【问题讨论】: