我想编写一个脚本,它接受1个命令行参数(目录),然后提示输入2个数字,然后打印出大小在这两个数字之间的任何文件(每个文件占据一行)。以下是我的脚本:
问题在于我输入数字后,它会打印出“The files...”,然后什么也不做。此外,我使用Vi进行编辑,但是最后三行的颜色不太对(颜色应该与第一个“fi”匹配,但实际上不匹配)。有人能告诉我错在哪里吗?谢谢。
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
问题在于我输入数字后,它会打印出“The files...”,然后什么也不做。此外,我使用Vi进行编辑,但是最后三行的颜色不太对(颜色应该与第一个“fi”匹配,但实际上不匹配)。有人能告诉我错在哪里吗?谢谢。
#!/bin/ksh
或者#!/bin/bash
,或者从echo $SHELL
获取到的任何值。并且你会发现大多数问题都可以通过设置shell调试/跟踪选项来运行此代码来解决。只需在echo -n ...
之前添加set -vx
即可。调试显示每个代码块在执行之前,以及带有前导+
符号的每行从该块中执行的代码行,包括变量的值。你应该看到$size
不是你想象中的那样。祝你好运。 - shellter#!/bin/??sh
这一行,从而声明你需要运行脚本的 shell。如果它与传统的 Bourne shell 兼容,则可以使用#!/bin/sh
,但如果你正在使用仅在 zsh 或 bash 中可用的功能(内置),则应使用#!/bin/bash
或#!/bin/zsh
- 或者其他。你还可以编写以#!/usr/bin/perl
开头的 Perl 脚本,然后chmod +x myPerlScript
,而无需在文件上使用如.pl
这样的扩展名。 - Stephen P