Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Command line 用于处理多个文件名的Unix脚本_Command Line_Loops_Command_Unix - Fatal编程技术网

Command line 用于处理多个文件名的Unix脚本

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“

我正在写一个脚本,它将折叠、排序和计数文件中的文本。我需要设计这个程序,这样,如果在命令行上给它多个文件名,它就可以一个接一个地分别处理每个文件名。我想我可以写一个循环,但我对这些还不太了解,所以如果可能的话,我想尝试其他的选择。我是否可以添加其他选项,以便在命令行中输入多个文件名

如果测试$#-lt 1 然后 echo“用法:$0请至少输入一个DNA文件名” 出口 fi 如果测试-r$* 然后 fold-w3$*| sort | uniq-c | sort-k1,1nr-k2 否则
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:随你的便。