Typesort Shellscript в Unix - PullRequest
       15

Typesort Shellscript в Unix

1 голос
/ 24 октября 2019

Я новичок во всем этом написании 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
...