Command line 用于处理多个文件名的Unix脚本
我正在写一个脚本,它将折叠、排序和计数文件中的文本。我需要设计这个程序,这样,如果在命令行上给它多个文件名,它就可以一个接一个地分别处理每个文件名。我想我可以写一个循环,但我对这些还不太了解,所以如果可能的话,我想尝试其他的选择。我是否可以添加其他选项,以便在命令行中输入多个文件名 如果测试$#-lt 1 然后 echo“用法:$0请至少输入一个DNA文件名” 出口 fi 如果测试-r$* 然后 fold-w3$*| sort | uniq-c | sort-k1,1nr-k2 否则Command line 用于处理多个文件名的Unix脚本,command-line,loops,command,unix,Command Line,Loops,Command,Unix,我正在写一个脚本,它将折叠、排序和计数文件中的文本。我需要设计这个程序,这样,如果在命令行上给它多个文件名,它就可以一个接一个地分别处理每个文件名。我想我可以写一个循环,但我对这些还不太了解,所以如果可能的话,我想尝试其他的选择。我是否可以添加其他选项,以便在命令行中输入多个文件名 如果测试$#-lt 1 然后 echo“用法:$0请至少输入一个DNA文件名” 出口 fi 如果测试-r$* 然后 fold-w3$*| sort | uniq-c | sort-k1,1nr-k2 否则 echo“
echo“用法:$*必须可读” 出口 fi
Nena您可以使用
while
循环和shift
逐个迭代命令行参数,如下所示:
if test $# -lt 1 # insufficient arguments.
then
echo "usage: $0 Enter at least one DNA filename"
exit
fi
# loop through the argument on by one.
# till their number($#) becomes 0.
while test $# -gt 0
do
if test -r "$1" # use $1..$* represent all arguments.
then
fold -w3 "$1" | sort | uniq -c | sort -k1,1nr -k2
else
echo "usage: $1 must be readable"
exit
fi
# shift so that 2nd argument now comes in $1.
shift
done
for
循环在这里是合适的。以下形式用于迭代位置参数:
for f; do
# do work here using "$f" as the current argument
done
这相当于更详细的版本:
for f in "$@"; do
# do work here using "$f" as the current argument
done
谢谢你,罗曼,我需要学习更多关于“for”循环的知识。回答得好。这是一个非常复杂的方法,而且它在整个
$1
中缺少双引号@user475364:随你的便。