LINUX.ORG.RU

Вывод частей имени файла

 


0

1

Есть скрипт, [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 в ключи.



Последнее исправление: mmilky (всего исправлений: 1)

dirname нашёл, а basename - нет?

E ★★★
()

может ли у имени файла у которого откинуто расширение ещё раз откинуто расширение? т.е будет ли результат различен?

qulinxao ★★☆
()

Охохо, прямо наглядное пособие «как не надо писать скрипты на bash». Про getopts вам в школе не рассказывали? Для коротких ключей самое оно.

И да, ТЗ кривое. Ключ может быть только один, или как? Про basename уже написали. А вот dirname уже сомнителен, может, там вовсе надо readlink -e?

undertaker ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.