我正在尝试编写一个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
答案 0 :(得分:1)
wc -l file...
打印列为参数的每个文件名的行数和文件名
如果没有列出文件名,wc -l
将从标准输入读取,只打印行数。
简而言之,请使用
len=$(wc -l < file.txt)
请注意重定向,以便使用stdin而不是在命令行上命名文件。
并试图完全忘记反引号的存在:它们的使用已被弃用。使用所示的$(...)
语法。
答案 1 :(得分:0)
而不仅仅是wc -l file.txt
给cat 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 | | | |