Я новичок во всем этом написании Shellscript, поэтому я надеюсь на некоторую помощь с простым сценарием. Я хочу отсортировать файлы в папке / каталоге по их типу, заданному командой «type» в Linux. Я хочу отфильтровать вывод команды file с помощью grep (для сортировки только после пробела ':' ', например, текст ASCII или документ XML 1.0 и т. Д.) Я хочу реализовать следующие типы сортировки:
сортировать только текстовые файлы, используя опцию -t, сортировать только нетекстовые файлы, используя опцию -n, сортировать в обратном порядке, используя -r
. Я хотел сделать это, используя цикл while со смещением для перехода только к опциямнужно посмотреть на один вход ($ 1). Для разнообразных сортировок моей идеей было сделать 3 функции, которые используются в главном цикле while.
Итак, ниже приведен мой код, и моя главная проблема - реализовать сортировкуработает правильно:
Так что если у вас есть какие-либо рекомендации для меня или какие-то решения для этого, я был бы признателен.
Спасибо за вашу помощь и ответы.
#A shell script with in- and output
#22.10.19
usage()
{
cat <<EOF
$typesort [OPTIONS] FILE [ FILE ... ]
Sort filenames by file type given by
the ''file'' command
$typesort --version Print version number
OPTIONS:
-t sort text files only
-n sort non-text files only
-r reverse sort order
-v --verbose print debugging messages
EOF
}
# ----------------------------------------------
t = "-t"
n = "-n"
v = "-v"
tr = "-tr"
nr = "-nr
# -------------------------------------------------
sort_t()
{
sort -t':' -k 2 | grep -rI "\ASCII text\" < file *
}
# #######################################################
sort_n()
{
sort -t':' -k 2 | grep -r -v "ASCII text" < file *
}
# #######################################################
sort_r()
{
}
# #######################################################
# main
while []
do
if [ $1 == t ]
then
sort_t
break
elif [ $1 == n ]
then
sort_n
break
elif [ $1 == r ]
then
sort_r
break
elif [ $1 == v ]
then
echo "wrong input try again"
else
#at least 1 arg, let's check it
case $1 in
"-h" | "--help") #display help text
usage
;;
"--version") #display version number
echo "version number 0.1"
break
;;
*) #anything else not valid
echo "invalid option"
;;
esac
fi
shift
done
exit 0