【发布时间】:2014-06-11 18:31:28
【问题描述】:
我想编写一个带有 1 个命令行参数(一个目录)的脚本,然后提示输入 2 个数字,然后它将打印出大小介于 2 个数字之间的任何文件(每个文件在不同的行中),这个是我的剧本
echo -n "Enter the first number: "
read a
echo -n "Enter the second, bigger number: "
read b
if
[ $b -lt $a ]
then
echo 'The first number must be smaller'
else
echo The files in $1 that are between $a and $b bytes are the following
echo
for var in 'ls $1'
do
if
[ -f $var ]
then
size='ls -l $var | '{ print $5 }''
if
[ $size -le $b && $size -ge $a ]
then
echo $var is $size bytes
fi
fi
done
fi
问题是在我输入数字后,它会打印出“文件...”,然后什么都没有。另外,我用vi编辑,但最后三行的颜色不太对(颜色应该和第一个“fi”匹配,但不是)。谁能告诉我出了什么问题?谢谢。
【问题讨论】:
-
您需要一个“shebang”行作为脚本的最上面一行。您应该拥有
#!/bin/ksh或#!/bin/bash或您从echo $SHELL获得的任何值。并且您只需在设置了 shell 调试/跟踪选项的情况下运行此代码即可发现大部分问题。添加set -vx只是echo -n ...。调试会在执行之前显示每个代码块,以及带有前导+符号的代码块中被执行的每一行,其中包含变量的值。你应该看到$size不是你想象的那样。祝你好运。 -
为什么我需要那个 hashbang 行?我很快就读到了它,但仍然不明白我为什么需要它。非常感谢,我不知道有一个调试器:)
-
@NguyễnDuy 您应该包含
#!/bin/??sh行,实质上是声明运行脚本所需的shell。如果它与 good-old-bourne shell 兼容,您将使用#!/bin/sh,但如果您使用仅在 zsh 或 bash 中可用的功能(内置),则应使用#!/bin/bash或 '#!/bin/ zsh` - 或其他任何东西。您还可以编写以#!/usr/bin/perl开头然后是chmod +x myPerlScript的 Perl 脚本之类的东西,并且您不必在文件上使用诸如.pl扩展名之类的废话。
标签: shell unix conditional-statements ls