Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 逐行读取目录中的所有文件,并对其执行命令_Bash_Shell_Scripting_Directory - Fatal编程技术网

Bash 逐行读取目录中的所有文件,并对其执行命令

Bash 逐行读取目录中的所有文件,并对其执行命令,bash,shell,scripting,directory,Bash,Shell,Scripting,Directory,我试图制作一个脚本,允许我在对这些文件的特定列执行命令时逐行读取目录中的所有文件。我正在处理的文件是.txt文件,其值用逗号分隔。通过将文本文件输入脚本,然后输出值,我可以使用单个文件执行代码,但不能使用多个文件,这是我的目标。我想文件被读取的顺序,他们在目录中。这是我到目前为止所拥有的 directory=$(/dos2unix/*.txt) file=$(*.txt") IFS="," for "$file" in "$directory"; do while read -ra li

我试图制作一个脚本,允许我在对这些文件的特定列执行命令时逐行读取目录中的所有文件。我正在处理的文件是.txt文件,其值用逗号分隔。通过将文本文件输入脚本,然后输出值,我可以使用单个文件执行代码,但不能使用多个文件,这是我的目标。我想文件被读取的顺序,他们在目录中。这是我到目前为止所拥有的

directory=$(/dos2unix/*.txt)
file=$(*.txt")
IFS=","
for "$file" in "$directory";
do
    while read -ra line;
    do
            if [ "${line[1]}" != "" ]; then
                echo -n "${line[*]}, Hash Value:"; echo "${line[1]}" | openssl dgst -sha1 | sed 's/^.* //'
            else
                if [ "${line[1]}" == "" ]; then
                    echo "${line[*]}, Hash Value:None";
                fi
            fi
    done
done
我遇到的一些错误包括:

$ ./orange2.sh
/dos2unix/test1.txt: line 1: hello: command not found
/dos2unix/test1.txt: line 2: goodbye: command not found
/dos2unix/test1.txt: line 4: last: command not found
./orange2.sh: line 28: unexpected EOF while looking for matching `"'
./orange2.sh: line 33: syntax error: unexpected end of file
有什么提示、建议或例子吗

谢谢大家

更新
我还希望最终复制所有文件,以包含您在第一条if语句中看到的命令,因此我希望a.)将我的文件分开,b.)创建一个包含更新值的副本。

如果要将文件名保存在变量中,请使用
array=(a b c)
语法创建一个数组。没有美元标志。然后使用“${array[@]}”中的项的
在数组上循环

要在读取时使用
循环读取文件,请在读取时使用
;做完成<“$file”
。它看起来很奇怪,但是文件作为一个整体被重定向到循环中

files=(/dos2unix/*.txt)

for file in "${files[@]}"; do
    while IFS=',' read -ra line; do
        ...
    done < "$file"
done

谷歌搜索
find-typef-execdircmd{}我喜欢第一个示例的内容,它看起来应该可以工作,但当我实际运行脚本时,它会将我带到下一行输入文本,就像我没有要求文件一样。我不想看这些文件,因为在这条线上的某个地方,我们想制作文件的副本,将所有文件分开。知道它为什么不读取文件并请求文本吗?@Beardy
cat
不修改文件,它只是将它们一个接一个地打印到stdout。对,但是如果我想将file1.txt等文件复制到file1-copy.txt,那么我可能不想使用cat。我希望基本上读取所有文件,但逐个读取,使用我将在特定列上运行的更新命令复制其内容。副本将包含更新。这有意义吗?