我正在编写一个脚本来从标准输入中获取最长和最短的行,但没有成功。
要调用该程序,您应该使用类似的东西:
LongShort.sh /tmp/filetest.txt
我的脚本目前看起来像这样。
#! /bin/bash LongShort.sh
longest=0
shortest=0
while read line
do
linelength=${#line}
if [ "$linelength" -gt "$longest" ]
then
$longest = $line
$longestlength = $linelength
elif [ "$linelength" -lt "$shortest" ]
then
$shortest = $line
$shortestlength = $linelength
fi
done < $2
echo $longestlength $longest
echo $shortestlength $shortest
有没有人看出哪里出了问题?
最佳答案
您的脚本有几处错误:
- 您有时会使用
longest
存储最长的行,有时用它来存储最长的行length - 在 bash 中为变量赋值时,语法为
<name>=<value>
没有空格。使用$
左侧的符号(通常)是错误的,因为您正试图将某些内容分配给存储在变量中的值。所以像$longest = $line
这样的行应该改为longest=$line
- 通过初始化
shortest
至0
, 你向自己保证永远不会找到最短的线,因为没有线的长度永远不会小于0
.您需要将其初始化为至少与文件中最短行一样大的值。
编辑:正如您自己指出的,最好将循环内部分成两个 if
捕获最短行在前或所有行长度相同的情况的语句。
这是我的版本:
#!/bin/bash LongShort.sh
# use *length variables to store the lengths
longestlength=0
shortestlength=5000 # initialize shortestlength to something big
while read line
do
linelength=${#line}
if [ $linelength -gt $longestlength ];
then
longest=$line # assign values properly
longestlength=$linelength
fi
if [ $linelength -lt $shortestlength ];
then
shortest=$line
shortestlength=$linelength
fi
done < $2
echo $longestlength $longest
echo $shortestlength $shortest
关于linux - 如何从 bash 中的标准输入获取最长和最短的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27284969/