Bash Unix中的Typesort外壳脚本

Bash Unix中的Typesort外壳脚本,bash,shell,Bash,Shell,我对整个Shellscript的编写还不熟悉,所以我希望能从一个简单的脚本中得到一些帮助。 我想做的是按照Linux中“type”命令给出的文件类型对文件夹/目录中的文件进行排序。 我想使用grep过滤file命令的输出(仅在“:”空格后排序,例如,ASCII文本或xml1.0文档等) 我想实现这些排序类型: 使用-t选项仅对文本文件进行排序 使用-n选项仅对非文本文件排序 使用-r按相反顺序排序 我想用一个while循环来实现这一点,并将选项转换为只需查看一个输入($1) 对于各种各样的类型,

我对整个Shellscript的编写还不熟悉,所以我希望能从一个简单的脚本中得到一些帮助。 我想做的是按照Linux中“type”命令给出的文件类型对文件夹/目录中的文件进行排序。 我想使用grep过滤file命令的输出(仅在“:”空格后排序,例如,ASCII文本或xml1.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
#具有输入和输出的shell脚本
#22.10.19
用法()
{

cat根据文件内容对文件名进行排序有什么意义?这主要是为了测试如何在类似文件的命令上对文件进行排序。为了测试,我有多个文件,其中一些文件没有像txt这样的结尾,所以我需要检查这些文件的类型以正确排序。因此,我的主要写作思想是这个脚本好吗?或者我有问题吗?@JerryJeremiah所以基本上我可以运行这些命令中的任何一个来按文件类型对文件进行排序?所以我的sort_t()命令函数几乎是正确的?很抱歉有这样的初学者问题,但这是我试图编写的第一个脚本这对于第一个脚本来说是非常雄心勃勃的。真正的问题是它对你的(除了学习之外)有任何实用性吗?照此看来,你对shell脚本的基本知识掌握得很好,除了你需要一个“she bang”顶部的一行,通常是
#!/bin/bash
。您可以将您的“she bang”ed代码粘贴到,它可能会警告您引用变量和其他一些内容。因此,我说,您准备出去制造麻烦;-)请记住,在您的家庭照片存档上释放可能存在错误的脚本之前,项目需要处理测试数据!祝您好运。您有两条独立的信息:文件名和应用于文件名的
文件的
命令的输出。文件内容(数据)与您无关;因此对文件进行grep没有任何意义。您可以使用当前版本的代码更新OP吗?根据文件内容对文件名进行排序有什么意义?这主要是为了测试目的,以了解如何在类似文件的命令上对文件进行排序。对于测试,我有多个文件和一些这些没有像txt那样的结尾,所以我需要检查它们是哪种类型来正确排序。那么我写这个脚本的主要想法好吗?或者我有问题吗?@JerryJeremiah所以基本上我可以运行这些命令中的任何一个来按它们的类型排序文件?所以我的排序命令是函数几乎是正确的?很抱歉有这样的初学者问题,但这是我试图编写的第一个脚本这对于第一个脚本来说是非常雄心勃勃的。真正的问题是它对你的(除了学习之外)有任何实用性吗?照此看来,你对shell脚本的基本知识掌握得很好,除了你需要一个“she bang”顶部的一行,通常是
#!/bin/bash
。您可以将您的“she bang”ed代码粘贴到,它可能会警告您引用变量和其他一些内容。因此,我说,您准备出去制造麻烦;-)请记住,在您的家庭照片存档上释放可能存在错误的脚本之前,项目需要处理测试数据!祝您好运。您有两条独立的信息:文件名和应用于文件名的
文件的
命令的输出。文件内容(数据)与您无关;因此对文件进行grep没有任何意义。您可以使用当前版本的代码更新OP吗?