2014-09-29 58 views
-1

它的我第一次使用bash腳本和一直在尋找一些教程,但無法弄清楚一些代碼。我只想列出文件夾中的所有文件,但我無法做到。 繼承人我的代碼到目前爲止。巴什腳本打印列表

#!/bin/bash 
# My first script 
echo "Printing files..." 
FILES="/Bash/sample/*" 

for f in $FILES 
do 
    echo "this is $f" 
done 

,這裏是我的輸出..

打印文件... 這是/猛砸/樣品/ *

什麼是錯我的代碼?

+0

你沒有得到一個文件列表,你只是定義一個恰好包含文件系統路徑+通配符的字符串。 – 2014-09-29 15:04:46

+1

你得到的輸出可能發生在兩種情況下 - 「/ Bash/sample'目錄不存在或'/ Bash/sample'目錄爲空。 – Fazlin 2014-09-29 15:16:28

回答

2

你誤會由 「中」 字的意思是bash。聲明for f in $FILES簡單地遍歷(空格分隔)的話串$FILES,其值爲「/猛砸/樣本」(一個字)英寸你似乎想要那些位於命名目錄「in」中的文件,這是bash語法不假設的空間隱喻,所以你必須明確地告訴它列出這些文件。

for f in `ls $FILES`   # illustrates the problem - but don't actually do this (see below) 
... 

可能會這樣做。這將ls命令的輸出轉換爲字符串「in」,每個文件將有一個字。

注意:這個例子是幫助理解什麼是「in」的意思,但是不是一個很好的通用解決方案。只要其中一個文件的名稱中有一個空格,它就會遇到麻煩 - 這樣的文件將爲列表貢獻兩個或更多的單詞,每個單詞可能不是有效的文件名。這突出(a)您應始終採取額外的步驟,以在周圍bash和類似炮彈的空白問題的程序,以及(b),你應​​該避免空間在自己的文件和目錄名,因爲你會遇到很多的,否則有用的第三方腳本和公用事業沒有努力遵守(a)。不幸的是,恰當的合規性通常會導致bash中語法混亂。

+0

如果文件包含空格,則此代碼有問題。原來的做法更好。 – IRus 2014-09-29 15:12:11

+0

謝謝@jez,我明白了。非常感謝你 – chkm8 2014-09-29 15:27:17

+2

[不要分析ls](http://mywiki.wooledge.org/ParsingLs)! – anishsane 2014-09-29 15:36:42

0

我覺得在路徑 「/Bash/sample/*」 的問題。

ü需要更改此位置,以絕對的,例如:

/home/username/Bash/sample/*

或者使用相對路徑,例如:

~/Bash/sample/*

在大多數系統中,這是完全等價的:

/home/username/Bash/sample/*

用戶名是當前的用戶名,使用whoami看到您的當前用戶名。

最適合學習的地方擊:http://www.tldp.org/LDP/abs/html/index.html

+0

你怎麼確定他沒有'/ Bash/sample /'目錄? – Fazlin 2014-09-29 15:13:53

+0

只是猜測:)這是不尋常的有根文件。 – IRus 2014-09-29 15:15:36

0

這應該工作:

echo "Printing files..." 
FILES=(/Bash/sample/*) # create an array. 
         # Works with filenames containing spaces. 
         # String variable does not work for that case. 

for f in "${FILES[@]}" # iterate over the array. 
do 
    echo "this is $f" 
done 

&你should not parse ls output

0

把你的文件列表)

如果你想利用你的文件列表,看看他們:

ls       ###Takes list### 
    ls -sh      ###Takes list + File size### 
    ... 

如果您要發送的文件列表,文件讀取和檢查他們晚些時候:

ls > FileName.Format   ###Takes list and sends them to a file### 
    ls > FileName.Format   ###Takes list with file size and sends them to a file###