2012-08-15 12 views
0
#!/bin/bash 
for dir in /home/username/git/*/ 
do 
    for file in "$dir"/* 
    do 
     if [[ -f $file ]] 
     then 
      echo "$file" 
     fi 
    done 
done 

當我嘗試運行它時。我得到了用於迭代文件的Shell腳本。第3行出現錯誤

syntax error near unexpected toke' `do 
'rocTest.sh: line 3: `do 

爲什麼?

+0

適合我...(bash版本4.1.2) – alfasin 2012-08-15 15:24:29

+2

這是你正在看到的確切的錯誤信息,還是它在你發佈時被scrumpled?如果是這樣,你的腳本中可能會有一些時髦的字符。 – Mat 2012-08-15 15:24:46

+2

檢查你是否在第三行'do'後面有一些有趣的角色。將光標放在第二個「for」中的「f」後面並繼續點擊退格鍵,直到刪除「do」中的「o」。然後輸入「o」,然後輸入CR,然後輸入「f」。現在省略縮進 - 稍後您可以修復它。 – 2012-08-15 15:26:32

回答

0

使用"$file"(帶引號)一致地處理「有問題的」文件名;特別是if [[ -f $file ]]應該

if [[ -f "$file" ]] ...

注意的bash並不總是位於/ bin(如FreeBSD的地方是在/ usr/local/bin目錄);對於更寬的便攜性,要麼使用

#!/usr/bin/env bash

#!/bin/sh,並確保除去的bash-ISMS(例如使用在Debian/Ubuntu的checkbashisms)。例如。寫if test -f "$file"而不是[[ -f "$file" ]]