这是提示符:
编写Korn脚本(并在这里显示它的代码),该脚本将确定某个目录中的哪个文件具有最大行数(这可能与具有最大字节数的文件不同)。确定最大行数的文件后,脚本将打印出文件名和行数。脚本必须只关注文件而忽略子目录。命令
wc可能会有所帮助。不要编写要交互执行的脚本。 要求: 脚本必须不允许任何参数或1参数。
脚本必须能够处理以下错误条件:
脚本文件名必须是:maxlines.sh。脚本权限应该是705。
这是我的代码:
#!/bin/ksh
if [ $# -gt 1];then
echo "There must be 0 or 1 arguments"
exit
fi
if [ -d "$1" ];then
cd $#
fi
max=0
for file in *
do
lines=$(( $( wc -l < "$file" ) ))
if [ $max -lt $lines ];then
max=$lines
fi
done如有任何建议,将不胜感激。我是Linux新手,所以这是相当令人沮丧的。当我运行它时,输出如下所示:
./maxlines.sh[2]: [: ']' missing
./maxlines.sh[9]: cd: 1: [No such file or directory]
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory
wc: standard input: Is a directory发布于 2016-03-01 10:52:16
正如@JeremyBrooks已经解释的那样,您的脚本中有很多错误,但是您并没有完全走错路。
这是我的解决办法:
#!/bin/ksh
if [ $# -gt 1 ];then
echo "There must be 0 or 1 arguments"
exit
fi
if [ -d "$1" ]
then
cd $1
fi
max=0
for file in $(find . -name "*" -type f)
do
lines=$(( $( wc -l < "$file" ) ))
if [ $max -lt $lines ];then
max=$lines
maxFile=$file
fi
done
echo "file[$maxFile] - max[$max]"使用for file in $(find . -name "*" -type f),您将只获得文件;在以前的版本中,您也将获得目录,但您希望计算文件行。
另一种防止排除目录的方法是for file in $(ls -l * | grep -v "^d"|awk '{print $9}',但这并不像find那样快。
在获得最大行号时,还忘记保留文件名,因此在if中必须添加maxFile=$file。
然后,不要忘记打印结果:echo "file[$maxFile] - max[$max]"后的for。
发布于 2016-03-01 20:37:56
您还可以尝试将命令与管道组合起来:
wc -l * 2>/dev/null| grep -v total | sort -n | tail -1 | sed -r 's/\s*([0-9]*) (.*)/\2 has \1 lines./'您仍然应该处理参数(除了在[和]周围的if-语句中使用空格)。以及如何处理没有文件的dir:
output=$(same_command_as_above)
if [ -z "${output}" ]; then ...https://stackoverflow.com/questions/35710550
复制相似问题