Мне просто нужен простой пример сценария удара для обрабатывания единственного файла или нескольких файлов, если подстановочный знак передается как аргументы
если я работаю
myscript file1
сделайте что-то с файлом, и если я выхожу
myscript *.pdf
сделайте что-то с критериями соответствия файла
Кто-либо может дать простой пример?
Эти *.pdf
будет расширен оболочкой прежде, чем выполнить сценарий, таким образом, сценарий не будет видеть *.pdf
, это будет видеть имена файлов соответствия непосредственно:
$ cat foo.sh
#! /bin/sh
printf "|%s|\n" "$@"
$ touch {1..10}.pdf
$ ./foo.sh 1.pdf
|1.pdf|
$ ./foo.sh *.pdf
|1.pdf|
|10.pdf|
|2.pdf|
|3.pdf|
|4.pdf|
|5.pdf|
|6.pdf|
|7.pdf|
|8.pdf|
|9.pdf|
В рамках сценария удара, можно использовать "$@"
для получения, все аргументы передали ему, или используйте $1
, $2
, и т.д. для доступа к первому, второму, и т.д. аргумент непосредственно.
можно просто циклично выполниться по всем спорам с плоскостью for
:
for i # Or, for i in "$@"
do
echo "Processing argument $i"
done
произведет:
Processing argument 1.pdf
Processing argument 10.pdf
Processing argument 2.pdf
Processing argument 3.pdf
Processing argument 4.pdf
Processing argument 5.pdf
Processing argument 6.pdf
Processing argument 7.pdf
Processing argument 8.pdf
Processing argument 9.pdf
Вот тот, читающий в Вашем файле (файлах) как массив, разрешающий Вам работать с ним как Вам нравится:
#!/bin/bash
filearray=( "$@" )
if [ ${#filearray[@]} -gt "1" ] || [ ${#filearray[@]} == "0" ]; then
isare=are
ent=entries
else
isare=is
ent=entry
fi
echo "There $isare ${#filearray[@]} $ent."
echo ""
if [ ${#filearray[@]} == "0" ]; then
echo "Nothing entered."
exit
else
echo "This is what you entered or what was found: "
echo ""
printf '%s\n' "${filearray[@]}"
fi
Используя "" для массива делает его так, чтобы это считало файлы, даже если они будут иметь пробелы и не разделят их, когда они печатают. Я также добавил изменения формулировки на основе количества найденных файлов. Никакая запись не покажет 0. ${#filearray[@]}
количества число элементов, где ${filearray[@]}
покажет все элементы.
Примеры:
Одна запись:
$ ./myscript myfile.txt
There is 1 entry.
This is what you entered or what was found:
myfile.txt
Многократные въезды:
$ ./myscript *.sh
There are 5 entries.
This is what you entered or what was found:
blue-ray_encode.sh
lightsOn.sh
removeoffender.sh
test1.sh
test.sh
Никакие записи:
$ ./myscript
There are 0 entries.
Nothing entered.