2013-10-17 129 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,應該在任何環境下工作,恕我直言。