2013-10-17 98 views
1

我想创建一个简单的shell脚本来列出第一次输入6次,一行,然后报告第二次输入的大小。这里是我的脚本:Bash脚本将不起作用:找不到命令

#!/bin/sh 

# script1.sh 
# 
# 
# $1=filename $2=number 

i=0 

while [$i -lt 7] #line 11 
do 
    i=$(($i + 1)) 
    echo $1 
done 

printf "\n" 

if [$2 -gt 1000]  #line 19 
then 
    echo 'This is a big number!' 
else 
    echo 'This is a small number.' 
fi 

这里是尝试使用,当我收到错误:

./script1.sh试验131234 ./script1.sh:第11行:[0:命令找不到

./script1.sh:第19行:[131234:找不到命令 这是一个小数字。

我想它的部分工作,但有关命令-lt和-gt导致错误。在Linux和终端(OS X)上运行提供相同的错误。

回答

8

您需要在[]条件的空间:

if [ $2 -gt 1000 ]  #line 19 
    ^  ^

while [ $i -lt 7 ] #line 11 
    ^ ^

,而不是

if [$2 -gt 1000]  #line 19 

while [$i -lt 7] #line 11 

请注意,否则它不会像它应该那样考虑这些表达式。相反,它将它们理解为名为[$2[$i的字符串。

+2

谢谢!很容易修复!将在13分钟内检查答案。 –

2

您需要的空间周围[]

while [ $i -lt 7 ] #line 11 

而其他行与[]

[是象别的命令,所以当你使用[$i,它试图执行[$i,在这种情况下[0[121234

0
$ \[.exe --help 
Usage: test EXPRESSION 
    or: test 
    or: [ EXPRESSION ] 
    or: [ ] 
    or: [ OPTION 
Exit with the status determined by EXPRESSION. 

     --help  display this help and exit 
     --version output version information and exit 

An omitted EXPRESSION defaults to false. Otherwise, 
EXPRESSION is true or false and sets exit status. It is one of: 

    (EXPRESSION)    EXPRESSION is true 
    ! EXPRESSION     EXPRESSION is false 
    EXPRESSION1 -a EXPRESSION2 both EXPRESSION1 and EXPRESSION2 are true 
    EXPRESSION1 -o EXPRESSION2 either EXPRESSION1 or EXPRESSION2 is true 

    -n STRING   the length of STRING is nonzero 
    STRING    equivalent to -n STRING 
    -z STRING   the length of STRING is zero 
    STRING1 = STRING2 the strings are equal 
    STRING1 != STRING2 the strings are not equal 

    INTEGER1 -eq INTEGER2 INTEGER1 is equal to INTEGER2 
    INTEGER1 -ge INTEGER2 INTEGER1 is greater than or equal to INTEGER2 
    INTEGER1 -gt INTEGER2 INTEGER1 is greater than INTEGER2 
    INTEGER1 -le INTEGER2 INTEGER1 is less than or equal to INTEGER2 
    INTEGER1 -lt INTEGER2 INTEGER1 is less than INTEGER2 
    INTEGER1 -ne INTEGER2 INTEGER1 is not equal to INTEGER2 

    FILE1 -ef FILE2 FILE1 and FILE2 have the same device and inode numbers 
    FILE1 -nt FILE2 FILE1 is newer (modification date) than FILE2 
    FILE1 -ot FILE2 FILE1 is older than FILE2 

    -b FILE  FILE exists and is block special 
    -c FILE  FILE exists and is character special 
    -d FILE  FILE exists and is a directory 
    -e FILE  FILE exists 
    -f FILE  FILE exists and is a regular file 
    -g FILE  FILE exists and is set-group-ID 
    -G FILE  FILE exists and is owned by the effective group ID 
    -h FILE  FILE exists and is a symbolic link (same as -L) 
    -k FILE  FILE exists and has its sticky bit set 
    -L FILE  FILE exists and is a symbolic link (same as -h) 
    -O FILE  FILE exists and is owned by the effective user ID 
    -p FILE  FILE exists and is a named pipe 
    -r FILE  FILE exists and read permission is granted 
    -s FILE  FILE exists and has a size greater than zero 
    -S FILE  FILE exists and is a socket 
    -t FD  file descriptor FD is opened on a terminal 
    -u FILE  FILE exists and its set-user-ID bit is set 
    -w FILE  FILE exists and write permission is granted 
    -x FILE  FILE exists and execute (or search) permission is granted 

Except for -h and -L, all FILE-related tests dereference symbolic links. 
Beware that parentheses need to be escaped (e.g., by backslashes) for shells. 
INTEGER may also be -l STRING, which evaluates to the length of STRING. 

NOTE: [ honors the --help and --version options, but test does not. 
test treats each of those as it treats any other nonempty STRING. 

NOTE: your shell may have its own version of test and/or [, which usually supersedes 
the version described here. Please refer to your shell's documentation 
for details about the options it supports. 

Report [ bugs to [email protected] 
GNU coreutils home page: <http://www.gnu.org/software/coreutils/> 
General help using GNU software: <http://www.gnu.org/gethelp/> 
For complete documentation, run: info coreutils '[ invocation' 

使用Cygwin + Bash,应该在任何环境下工作,恕我直言。