Есть скрипт, [flag] [filename]
-n - имя файла без расширения
-f - имя файла с расширением
-e - расширение
-d - имя директории, которой принадлежит файл (если существует)
-p - если имя файла начинается с . или .. , то считаем, что эти символы не входят в имя файла.
#!/bin/bash
eval LAST=\$$#
FILE=$LAST
if [ $# -lt 1 -o $# -gt 3 ]
then echo "$0: ARG error " >&2
echo "Use: $0 [flags] [file]" >&2
exit 0
fi
for ARG in $@
do
case $ARG in
-n)NAME=${FILE%.*} ;;
-f)NAME=$FILE ;;
-e)if [ `echo $FILE | grep -c "\."` -gt 0 ]
then
NAME=${FILE##*.}
else
echo ""
fi ;;
-d)NAME=`dirname $FILE` ;;
-p)if [ `echo $FILE | cut -c2` = "." ]
then
NAME=${NAME#..}
else
NAME=${NAME#.}
fi ;;
esac
done
echo $NAME
echo
Работает только для файлов из каталога, где находиться скрипт. Не знаю как организовать для файлов из других директорий, ../..filename.sh. Не хотелось бы ляпать по несколько условий if в ключи.