bash:文件名作为参数,在循环中执行操作
我当前的脚本如下所示:bash:文件名作为参数,在循环中执行操作,bash,for-loop,parameters,Bash,For Loop,Parameters,我当前的脚本如下所示: #!/bin/bash victims=*asci* for f in $victims ; do awk /some blah blah here/ ;done 因此,基本上,所有文件的名称中都包含ascii,并对其执行操作 但是,我希望将文件名作为参数输入。比如: 例如,bash myscript.sh*log* 使用时 #!/bin/bash victims="$1" for f in $victims ; do awk /some blah blah
#!/bin/bash
victims=*asci*
for f in $victims ; do
awk /some blah blah here/ ;done
因此,基本上,所有文件的名称中都包含ascii,并对其执行操作
但是,我希望将文件名作为参数输入。比如:
例如,bash myscript.sh*log*
使用时
#!/bin/bash
victims="$1"
for f in $victims ; do
awk /some blah blah here/ ;done
它没有达到预期的效果。仅对第一个文件执行(据我记忆所及)
我可以请你帮忙吗?希望脚本在文件名中包含参数的一组文件上执行函数。老实说,我对bash不是很有经验。谢谢,干杯 如果您只是调用
awk
,那么您甚至不需要for
循环。一次传递所有文件名即可
awk '/whatever/' "$@"
如果要循环所有命令行参数,请编写:
for f in "$@"; do
...
done
或者,由于“$@”中的暗示:
for f; do
...
done
如果要将它们存储在中间变量中,则需要使用数组:
victims=("$@")
for f in "${victims[@]}"; do
...
done
此外,应该避免显式调用bash
。直接运行脚本,这样它就可以使用shebang行中列出的任何shell
bash myscript.sh *log*
./myscript.sh *log*
bash myscript.sh*日志*
./myscript.sh*日志*
如果您只是调用awk
,那么您甚至不需要for
循环。一次传递所有文件名即可
awk '/whatever/' "$@"
如果要循环所有命令行参数,请编写:
for f in "$@"; do
...
done
或者,由于“$@”
中的暗示:
for f; do
...
done
如果要将它们存储在中间变量中,则需要使用数组:
victims=("$@")
for f in "${victims[@]}"; do
...
done
此外,应该避免显式调用bash
。直接运行脚本,这样它就可以使用shebang行中列出的任何shell
bash myscript.sh *log*
./myscript.sh *log*
bash myscript.sh*日志*
./myscript.sh*日志*
您需要注意如何调用脚本。假设您的脚本myscript.sh是
victims="$1"
echo "$victims"
您的cwd包含文件a.log、另一个.log和logmore.txt
然后,执行
myscript.sh *log*
myscript.sh a.log another.log logmore.txt
结果会很简单
a.log
因为在调用myscript.sh之前,shell会解释“*log*
”。事实上,你正在执行
myscript.sh *log*
myscript.sh a.log another.log logmore.txt
您的脚本只处理第一个参数。同样有趣的是,当您的cwd不包含名称中带有“log”的文件时,您的脚本将导致:
*log*
因此,您的电话应该是:
myscript.sh "*log*"
您的脚本应该处理这样一个事实:它的输入可能是一个正则表达式。现有文件名。您需要注意如何调用脚本。假设您的脚本myscript.sh是
victims="$1"
echo "$victims"
您的cwd包含文件a.log、另一个.log和logmore.txt
然后,执行
myscript.sh *log*
myscript.sh a.log another.log logmore.txt
结果会很简单
a.log
因为在调用myscript.sh之前,shell会解释“*log*
”。事实上,你正在执行
myscript.sh *log*
myscript.sh a.log another.log logmore.txt
您的脚本只处理第一个参数。同样有趣的是,当您的cwd不包含名称中带有“log”的文件时,您的脚本将导致:
*log*
因此,您的电话应该是:
myscript.sh "*log*"
您的脚本应该处理这样一个事实:它的输入可能是一个正则表达式。现有文件名