Bash口译员阅读

时间:2015-11-06 20:09:19

标签: bash interpreter git-bash

#!/bin/bash
read k
read m
read fileName
head -n -$k $fileName | tail -n +$m $fileName 

嗨,这就是我现在拥有的。我必须创建bash解释器,从头部删除行并从文本文件中的尾部删除行。

我必须通过这种方式执行这个bash解释器。 ./strip.sh 2 3 hi.txt> bye.txt

如何读取2表示k和3表示m? 另外我如何读取hi.txt的fileName? 我的代码也正确吗? 请回答这些问题。我对这个bash解释器真的很陌生。 谢谢。

2 个答案:

答案 0 :(得分:1)

read用于从标准输入读取值。你想要的是位置参数:

k=$1
m=$2
fileName=$3 
head -n -$k "$fileName" | tail -n +$m

fileName删除tail的最后一个参数,因为它将从标准输入读取(由head的标准输出提供),而不是命名文件。

答案 1 :(得分:0)

@chepner指出你正确的方向,但目前的脚本不能按预期工作。如果你想尝试另一种方法:

#!/bin/bash
set -u

k=${1}
file=${3}
lines=$(wc -l < "${file}")
m=$[${lines}-${2}]

awk 'NR>'${k}' && NR<='${m} "${file}"

其中:

  • set -u:使未定义的变量(例如缺失的参数)停止执行
  • $(wc -l < "${file}"):计算文件的总行数。
  • $[${lines}-${2}]:从所需的底线减去(传递给总行数删除
  • awk 'NR>k && NR<=m':打印(默认awk行为)行&gt; k和&lt; = m