Почему этот короткий скрипт/функция bash не работает? Возможные решения? (Unix bash скриптинг)

Почему этот короткий скрипт/функция bash не работает? Возможные решения? (Unix bash скриптинг)

19.06.2013 02:59:25 Просмотров 26 Источник

Я пытаюсь сделать так, чтобы сообщение об ошибке появлялось, если кто-то запускает мой скрипт, но в качестве аргумента вводится несуществующий файл.

function finder(){
if test find $1 ; then
 exit 0
 else
 exit 1
fi
}

#### error message if file does not exist

if test finder -eq 1 ; then
 echo "safe_rm: cannot remove '$1' : No such file or directory"
fi

Я получаю сообщение об ошибке, говорящее, что от функции finger ожидается целое число , но не должно ли оно выдавать состояние выхода 0 или 1 в соответствии с моей функцией?

как я могу сделать заявление if, которое говорит: "Если статус exist finder равен 1, то echo "нет такого файла или каталога"?

Любой совет приветствуется!

У вопроса есть решение - Посмотреть?

Ответы - Почему этот короткий скрипт/функция bash не работает? Возможные решения? (Unix bash скриптинг) / Why doesn't this short bash script/function work? Possible solutions? (UNIX bash scripting)

Является ответом!
tpnx

19.06.2013 03:03:55

Почему бы и нет, если [- d / путь/к / папке ] или если [- f / путь/к / файлу ]

choroba

19.06.2013 03:09:19

Несколько проблем:

  1. exitостанавливает сценарий. Чтобы вернуть значение из функции, используйте return.

  2. testне принимает команду в качестве первого аргумента. Подробности смотрите в man test.

  3. finder -eq 1не запускает finder, он принимает его как строку.

На самом деле ты имел в виду что-то вроде:

if test -e "$1" ; then
    # ...
else
    echo "$1 does not exists."
fi
https://stackoverflow.com/questions/17189455/why-doesnt-this-short-bash-script-function-work-possible-solutions-unix-bash/17189637#comment24894261_17189637
+1, но следует упомянуть, что если функция сохранена, if test finder -eq 1должен быть переписанif finder "$1"; then ... для того, чтобы вызвать его
Varun

19.06.2013 05:25:12

В качестве альтернативы вы можете использовать:

if [ ! -e $1 ] ; then
    echo "safe_rm: cannot remove '$1' : No such file or directory"
fi
Закрыть X