编写一个输出第n行的shell脚本

时间:2018-06-08 18:40:09

标签: linux bash shell

我正在尝试编写一个shell脚本,该脚本从名为file.txt的文件中输出第n行,但我不断收到各种错误;其中之一包括

Line 7: [: 10 file.txt: integer expression expected

因此我似乎无法使其发挥作用。我做错了什么?

# Read from the file file.txt and output the tenth line to stdout.
#!/bin/bash

len=`wc -l file.txt`
echo $len

if [ "$len" -lt 10 ]
then
    errormessage="File too short"
    echo $errormessage
    exit 0
fi

var=`sed '10q;d' file.txt`
echo $var

3 个答案:

答案 0 :(得分:1)

wc -l file...打印列为参数的每个文件名的行数和文件名

如果没有列出文件名,wc -l将从标准输入读取,只打印行数。

简而言之,请使用

len=$(wc -l < file.txt)

请注意重定向,以便使用stdin而不是在命令行上命名文件。

并试图完全忘记反引号的存在:它们的使用已被弃用。使用所示的$(...)语法。

答案 1 :(得分:0)

而不仅仅是wc -l file.txtcat file.txt | wc -l。后者只返回行数,而第一行将返回带有文件名旁边的数字行。

答案 2 :(得分:0)

显示第十行或提供错误信息并退出:
我将使用exit 1,因为0通常都可以 但是,为了获得sed的特殊返回码,我会将sed返回1作为匹配。

errormessage="File too short"
var=$(sed -n '10 {p;q1}' file.txt) && { echo "${errormessage}"; exit 1; }
# You must have spaces above the pipes |    |                       |  |