shtools/ztr/zdtol
2020-10-26 11:25:36 +01:00

89 lines
1.6 KiB
Bash
Executable file

#!/bin/sh
usage () {
echo "zdtol [options] <name>"
echo " Searches a label for partition or disk /dev/<name>"
echo " Options: "
echo " -h Show this message then exit"
echo " -d Discard prefix (/dev/)"
echo " -n <num> Show only nth label"
}
error () {
printf "\033[1;31m%s\033[0m\n" "$1" >&2
}
while getopts ":hdn:" opt;
do
case $opt in
h)
usage
exit 0
;;
n)
if ! echo "$OPTARG" | grep -Eq '^[0-9]+$'
then
error "n argument has to be an integer"
exit 2
fi
if [ -z "$OPTARG" ]
then
error "n needs an argument"
exit 2
fi
if [ "$OPTARG" -lt 1 ]
then
error "argument has to be greater than 0"
exit 2
fi
_arg_n=$OPTARG
_opt_n=y
;;
d)
_opt_d=y
;;
\?)
echo "Unknown option: $OPTARG" >&2
usage
exit 1
;;
esac
done
shift $((OPTIND-1))
if [ $# -le 0 ]
then
usage
exit 2
fi
LIST=$(lsblk -lnio NAME,LABEL | tr -s ' ')
lsize=$(echo "$LIST" | wc -l)
for I
do
[ -n "$_opt_d" ] && I=${I#/dev/}
ret=$(echo "$LIST" | grep "^$I" | awk '{if($2){$1="";for(i=2;i<NF;i++){printf "%s ",$i};print $NF}}')
if [ -n "$_opt_n" ]
then echo "$ret" | sed -n -e "$_arg_n{p;q}"
else echo "$ret"
fi
done
exit
for _I in "$@"
do
if [ -n "$_opt_d" ] ; then
_I=$(echo "$_I" | cut -d'/' -f3)
fi
_ret=$(echo "$_LIST" | grep "$_I" | tr -s ' ' | cut -d' ' -f2- | sed '/^[[:space:]]*$/d')
if [ -n "$_opt_n" ] ; then
echo "$_ret" | cut -d'\n' -f"$_arg_n"
else
echo "$_ret"
fi
done
exit 0