【发布时间】:2014-04-27 01:10:50
【问题描述】:
我正在使用 Korn shell 完成以下一项任务。
对于参数列表中的每个参数(成为当前路径名):
- 检查当前路径名是否为目录,如果是:
- 用 null(空)字符串初始化变量 maxsubdir,然后 一个 maxentries 变量为 0;
- 对于目录中的每个条目,检查该条目是否代表一个
目录,如果是,则查找该目录中的条目数
带有由
ls -l和wc组成的管道的子目录,并保存 产生一个名为curentries的变量。 - 比较curentries和maxentries,如果curentries更大, 更新 maxsubdir 和 maxentries。 (--10 分)
- 当一个目录的
for循环完成时,显示(带有 echo) 目录名、maxsubdir 和 maxentries(带有适当的 解释性文字。) - 如果 a) 中的路径名不是目录,则显示路径名 以及说明路径名不代表的说明文字 一个目录。
- 转到下一个命令行参数(路径名)并重复 1-7
脚本的执行在所有路径名都处理完毕后结束(while 已完成)
这是我目前拥有的代码(已编辑):
#!/bin/ksh
directoy=$1
while [ $# -ne 0 ]; do
if [ -d $1 ]; then
maxsubdir=
maxentries=0
for x in $1; do
echo "Checking if $1 represents a directory..\n"
curentries="ls -l | wc"
if [ $curentries > $maxentries ]; then
maxentries=$curentries
maxsubdir=$curentries
fi;
done
echo "The directory structure of $1 is … \n"
echo "Maximum sub directories: \n"
echo "$maxsubdir\n"
echo "Maximum directory entries: \n"
echo "$maxentries"
fi
done
我需要在哪里插入“shift”命令,因为我的 Unix 只能处理有限数量的参数?
我的语法合适吗?还是我在排序行上有语法错误?
脚本似乎在运行,但没有输出到屏幕?也许是无穷无尽的?
【问题讨论】:
-
if condition中需要一个空格。if [ $curentries > $maxentries ] -
iamauser,ty,我添加了空格。仍然无法解决“第 6 行错误”投诉..
-
获取变量值时使用 $varname。分配 $ 时去掉它
-
请注意,您不要使用
directoy变量。你有一个无限循环,因为你从不移动。但是您可能无论如何都不应该使用while循环;for name in "$@"将是一个更好的循环使用(从技术上讲,in "$@"是可选的,但我个人总是写它是为了明确),尤其是因为你不必担心在哪里转移。 -
[ $foo > $bar ]此处不正确。您正在寻找-gt。man [: s1 s2 如果字符串 s1 基于其字符的 ASCII 值出现在 s2 之后,则为真。 n1 -eq n2 如果整数 n1 和 n2 在代数上相等,则为真。 n1 -gt n2 如果整数 n1 在代数上大于整数 n2,则为真。 n1 -ge n2 如果整数 n1 在代数上大于或等于整数 n2,则为真。 n1 -lt n2 如果整数 n1 在代数上小于整数 n2,则为真。