так что это вопрос к скрипту, о котором я уже спрашивал в предыдущем вопросе: Ссылка: Typesort Shellscript в Unix
Так что теперь ниже моя обновленная версия скрипта иМой новый вопрос: как мне изменить его, чтобы передать несколько файлов в качестве аргументов для их сортировки?
И есть ли более простой способ принимать аргументы типа "./typesort -rnv вместо -r -n-v "? Я чувствую, что мое решение не является оптимальным для этой проблемы.
Спасибо за ваши ответы.
#!/bin/bash
#A shell script with in- and output
usage()
{
cat <<EOF
$typesort [OPTIONS]
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
}
# ----------------------------------------------
#flags
tflag=0
nflag=0
rflag=0
vflag=0
bflag=0
# -------------------------------------------------
sort_nA()
{
if [ "$vflag" == 1 ]
then
echo "sort_nA"
echo "file * | sort -t':' -k 2"
fi
file * | sort -t':' -k 2
}
# #######################################################
sort_r()
{
if [ "$vflag" == 1 ]
then
echo "sort_r"
echo "file * | sort -t':' -k 2 -r"
fi
file * | sort -t':' -k 2 -r
}
# #######################################################
sort_t()
{
if [ "$vflag" == 1 ]
then
echo "sort_t"
echo "file * | grep "ASCII text" | sort -t':' -k 2"
fi
file * | grep "ASCII text" | sort -t':' -k 2
}
# #######################################################
sort_n()
{
if [ "$vflag" == 1 ]
then
echo "sort_n"
echo "file * | grep -v "ASCII text" | sort -t':' -k 2"
fi
file * | grep -v "ASCII text" | sort -t':' -k 2
}
# #######################################################
sort_rt()
{
if [ "$vflag" == 1 ]
then
echo "sort_rt"
echo "file * | grep "ASCII text" | sort -t':' -k 2 -r"
fi
file * | grep "ASCII text" | sort -t':' -k 2 -r
}
# #######################################################
sort_rn()
{
if [ "$vflag" == 1 ]
then
echo "sort_rn"
echo "file * | grep -v "ASCII text" | sort -t':' -k 2 -r"
fi
file * | grep -v "ASCII text" | sort -t':' -k 2 -r
}
# #######################################################
# main
while true
do
if [ "$1" == "-t" ]
then
tflag=1
elif [ "$1" == "-n" ]
then
nflag=1
elif [ "$1" == "-r" ]
then
rflag=1
elif [ "$1" == "-v" ]
then
vflag=1
else
#at least 1 arg, let's check it
case $1 in
"-h" | "--help") #display help text
bflag=1
usage
break
;;
"--version") #display version number
echo "version number 0.1"
bflag=1
break
;;
"")
break
;;
"-rt" | "-tr")
rflag=1
tflag=1
;;
"-rn" | "-nr")
rflag=1
tflag=1
;;
"-rv" | "-vr")
rflag=1
vflag=1
;;
"-vt" | "-tv")
tflag=1
vflag=1
;;
"-vn" | "-nv")
nflag=1
vflag=1
;;
"-tn" | "-nt")
tflag=1
nflag=1
"-rtn" | "-trn" | "-tnr" | "-rnt" | "-nrt" | "-ntr")
rflag=1
tflag=1
nflag=1
;;
"-vtn" | "-tvn" | "-tnv" | "-vnt" | "-nvt" | "-ntv")
vflag=1
tflag=1
nflag=1
;;
"-rvn" | "-vrn" | "-vnr" | "-rnv" | "-nrv" | "-nvr")
vflag=1
rflag=1
nflag=1
;;
"-rvt" | "-vrt" | "vtr" | "-rtv" | "-trv" | "-tvr")
vflag=1
rflag=1
tflag=1
;;
"-rvtn" | "-rtvn" | "-rtnv" | "-rvnt" | "-rnvt" | "-rntv" | "-vrtn" | "-vtrn" | "-vtnr" | "-vrnt" | "-vnrt" | "-vntr" | "-trvn" | "-tvrn" | "-tvnr" | "-trnv" | "-tnrv" | "-tnvr" | "-nrtv" | "-ntrv" | "-ntvr" | "-nrvt" | "-nvrt" | "-nvtr")
vflag=1
rflag=1
tflag=1
nflag=1
;;
*) #anything else not valid
echo "Invalid option: §1"
;;
esac
fi
shift
done
if [ "$vflag" == 1 ]
then
echo "tflag = $tflag"
echo "nflag = $nflag"
echo "rflag = $rflag"
echo "bflag = $bflag"
fi
if [ "$bflag" == 1 ]
then
bflag=1 # nothing should happen
elif [ "$rflag" == 1 ] && [ "$tflag" == "$nflag" ]
then
sort_r
elif [ "$rflag" == 1 ] && [ "$tflag" == 1 ]
then
sort_rt
elif [ "$rflag" == 1 ] && [ "$nflag" == 1 ]
then
sort_rn
elif [ "$tflag" == "$nflag" ]
then
sort_nA
elif [ "$tflag" == 1 ]
then
sort_t
elif [ "$nflag" == 1 ]
then
sort_n
fi
exit 0