Linux 编写输出第n行的shell脚本

Linux 编写输出第n行的shell脚本,linux,bash,shell,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"

我正试图编写一个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

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

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

简而言之,使用

len=$(wc -l < file.txt)
len=$(wc-l
请注意重定向,以便在命令行上使用stdin而不是命名文件


并且试着完全忘记倒勾符号的存在:它们的用法在很久以前就被弃用了。如图所示,使用
$(…)
语法。

而不是只给出
wc-l file.txt
give
cat file.txt | wc-l
。后一个将只返回行数,而第一个将返回旁边有文件名的行数。

显示第十行或给出错误消息并退出:
我将使用退出1,因为0通常正常。
但是,为了使
sed
有一个特殊的returncode,我将使
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 |    |                       |  |

尝试在shell中键入
wc-l file.txt
。你看到了什么?它只是一个数字吗?将输出捕获到一个变量以便输出它显然是多余的。@triplee:如果要这样做,最好引用扩展名。@Devam:脚本中的许多问题都可以通过传递它们来检测。它的用法是强烈推荐的。是的,我只是想发表另一个评论,并链接到整个脚本可能是一个Awk一行。。。可能是两个班轮。@triplee:可能是多种类型的一个班轮,包括
tail-n+10 | head-n1