2010-10-14 4 views
2

Я пишу скрипт, который будет складывать, сортировать и подсчитывать текст в файле. Мне нужно разработать программу так, чтобы, если ей задано несколько имен файлов в командной строке, она обрабатывает каждый отдельно, один за другим. Я думаю, что я мог бы написать цикл, но я не знаю, что много о них, но, если возможно, хотелось бы попробовать другие варианты. Существуют ли другие варианты, которые я могу добавить к этому, поэтому в командной строке можно ввести более одного имени файла?Unix Script для обработки нескольких имен файлов

если тест $ # -lt 1 затем эхо "Использование: $ 0 Введите хотя бы один ДНК имя файла" выход фи если тест -r $ * затем раза -w3 $ * | сортировать | uniq -c | сортировать -k1,1nr -к2 еще
эхо «Использование: $ * должен быть доступен для чтения» выход фи

Нена

ответ

3

for цикл будет уместным здесь. Следующая форма используется для перебора позиционных аргументов:

for f; do 
    # do work here using "$f" as the current argument 
done 

Это эквивалентно более многословной версии:

for f in "[email protected]"; do 
    # do work here using "$f" as the current argument 
done 
+0

Спасибо, Роман, мне нужно узнать больше о цикле «за». Хороший ответ. – Koala

1

Вы можете использовать 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 
+0

Спасибо codaddict. Это отлично поработало. – Koala

+0

Это ужасно сложный способ, и в нем нет двойных кавычек вокруг '$ 1'. @ user475364: просто пойдите с ответом [Roman Cheplyaka] (http://stackoverflow.com/questions/3930403/unix-script-to-process-multiple-file-names/3930534#3930534). – Gilles