我第一次使用BASH脚本并一直在寻找一些教程,但无法弄清楚一些代码。我只想列出文件夹中的所有文件,但我不能这样做。 到目前为止,这是我的代码。
#!/bin/bash
# My first script
echo "Printing files..."
FILES="/Bash/sample/*"
for f in $FILES
do
echo "this is $f"
done
这是我的输出..
打印文件... 这是/ Bash / sample / *
我的代码出了什么问题?
答案 0 :(得分:2)
你误解了bash在"中的含义是什么意思。语句for f in $FILES
简单地遍历字符串$FILES
中的(空格分隔的)单词,其值为" / Bash / sample" (一个词)。你似乎想要" in"命名目录,bash的语法没有假设的空间隐喻,因此你必须明确地告诉它列出文件。
for f in `ls $FILES` # illustrates the problem - but don't actually do this (see below)
...
可能会这样做。这会将ls
命令的输出转换为字符串,"在"每个文件将有一个单词。
注意:这个例子是为了帮助理解" in"意味着但不是一个很好的通用解决方案。一旦其中一个文件的名称中有空格,它就会遇到麻烦 - 这样的文件将为列表提供两个或多个单词,每个单独的单词可能不是有效的文件名。这突出了(a)你应该总是采取额外的步骤来编写bash和类似shell中的空白问题,以及(b)你应该避免在你自己的文件和目录名称中的空格,因为你会遇到很多其他有用的第三方脚本和实用程序没有努力遵守(a)。不幸的是,正确的合规性通常会导致bash中的语法模糊不清。
答案 1 :(得分:0)
我认为路径问题" /Bash/sample/*
"。
您需要将此位置更改为绝对位置,例如:
/home/username/Bash/sample/*
或使用相对路径,例如:
~/Bash/sample/*
在大多数系统上,这完全等同于:
/home/username/Bash/sample/*
用户名是您当前的用户名,请使用whoami
查看您当前的用户名。
学习Bash的最佳地点:http://www.tldp.org/LDP/abs/html/index.html
答案 2 :(得分: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
答案 3 :(得分: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###