используя else, если в псевдониме bash (домашнее задание)

Для моей домашней работы мне нужно написать псевдоним, который проверяет, является ли данный файл регулярным и читаемым. Проблема, которую я получаю, заключается в том, что если я включаю else if или elif, я получаю эту ошибку …

-bash: syntax error near unexpected token `else' 

вот мой код …

 alias getname='read filename' alias vfile='getname; if [ ! -f $filename ]; then echo "Irregular file"; (exit 1); elif [ ! -r $filename]; then echo "Not readable"; (exit 2); fi;' 

Мне нужно использовать else, если это так, что если есть ошибка, будет напечатан только один оператор.

Я знаю, что функция оболочки или скрипт будет более практичной, но для присвоения мне нужно использовать псевдоним. Я все еще очень новичок в UNIX, поэтому любая помощь будет очень оценена.

edit: Мне нужно использовать псевдоним, это имя файла, которое вы даете (статический файл), и даже когда я изменяю else if для elif я все еще получаю синтаксическую ошибку, описанную в вопросе.

EDIT2: я нашел проблему, я удалил fi; перед выражением elif, но теперь я получаю missing ']' ошибку.

Так что это сработало для меня:

 alias vfile='read -p "Enter the filename: " MY_FILE; if [ ! -f $MY_FILE ]; then echo "Irregular file"; (exit 1); elif [ ! -r $MY_FILE ]; then echo "Not readable"; (exit 2); fi' 

EDIT Я вижу, что вы там сделали =)

Для удобства чтения здесь выведена команда:

 alias vfile='read -p "Enter the filename: " MY_FILE; \ if [ ! -f $MY_FILE ]; then \ echo "Irregular file"; \ (exit 1); \ elif [ ! -r $MY_FILE ]; then \ echo "Not readable"; \ (exit 2); \ fi' 

Моя рекомендация – использовать такие функции (при условии, что вы используете последнюю версию Bash):

 is_regular(){ if [[ -f "${1}" ]]; then printf '%s\n' "'${1}' is a regular file" else printf '%s\n' "'${1}' is not a regular file" return 1 fi } is_readable(){ if [[ -r "${1}" ]]; then printf '%s\n' "'${1}' is readable" else printf '%s\n' "'${1}' is not readable" return 1 fi } 

Обратите внимание, что псевдонимы предназначены только для использования в качестве простых подстановок (например, ls --color=auto ). Но если вам действительно нужно сделать это с помощью псевдонимов, это должно сделать работу:

 alias is_regular='read -r -p '\''Filename: '\'' file; if [[ -f "${file}" ]]; then printf '\''%s\n'\'' "'\''${file}'\'' is a regular file"; else printf '\''%s\n'\'' "'\''${file}'\'' is not a regular file"; fi' alias is_readable='read -r -p '\''Filename: '\'' file; if [[ -r "${file}" ]]; then printf '\''%s\n'\'' "'\''${file}'\'' is readable"; else printf '\''%s\n'\'' "'\''${file}'\'' is not readable"; fi'