2013-10-17 4 views
1

첫 번째 입력을 6 번 나열하는 간단한 쉘 스크립트를 작성하려고합니다. 두 번째 입력의 크기를보고하십시오.Bash 스크립트가 작동하지 않습니다. 명령을 찾을 수 없습니다.

./script1.sh 테스트 131,234 ./script1.sh : 11 행 : [0 : 명령을 여기에

#!/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 : 줄 19 : [131234 : 명령을 찾을 수 없습니다. 이것은 작은 숫자입니다.

부분적으로 작동하지만 -lt 및 -gt 명령에 대한 일부 오류가 발생한다고 가정합니다. Linux와 Terminal (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를 사용하는 경우,이 경우 [0[121234에, [$i을 실행하려고.

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와 함께 사용하면 IMHO에서 작동해야합니다.

관련 문제