Как вызвать функцию из case в сценарии оболочки?

Мы можем восстановить файл, вернувшись к предыдущей версии JDK. Кажется глупым решением, но оно работает.

$ cd /var/cache/apt/archives
$ sudo dpkg -i oracle-java8-installer_8u77+8u77arm-1~webupd8~1_all.deb
1
задан 25 April 2017 в 15:07

4 ответа

Когда вы вызываете функцию, она должна быть определена и известна, когда вы вызываете function1 следующим образом:

u) function1 ;;

Интерпретатор понятия не имеет, где эта функция, потому что она еще не видел; поэтому поставьте свои функции над предложением case.

Это устранит проблему.

3
ответ дан 18 July 2018 в 14:20

@kashyap (и другие). Мне непонятно, есть ли у вас достаточно ответа, чтобы исправить вашу проблему? Я немного изменил ваш код, чтобы действительно увидеть, что происходит:

function1() { echo "I am function 1" } function2() { echo "I am function 2" } opt=$1 case $opt in u) function1 ;; g) function2 ;; *) echo "Nothing to do" exit ;; esac

Я назвал файл dummyFunc, дал ему x-биты, и это результаты.

$ ./dummyFunc u I am function 1 $ ./dummyFunc g I am function 2 $ ./dummyFunc Nothing to do $

Я надеюсь, что это поможет dummyFunc ? [D1] Если нет, покажите нам, как выглядит ваш скрипт, и добавьте вывод, который он генерирует.

0
ответ дан 18 July 2018 в 14:20

Когда вы вызываете функцию, она должна быть определена и известна, когда вы вызываете function1 следующим образом:

u) function1 ;;

Интерпретатор понятия не имеет, где эта функция, потому что она еще не видел; поэтому поставьте свои функции над предложением case.

Это устранит проблему.

3
ответ дан 24 July 2018 в 20:22

@kashyap (и другие). Мне непонятно, есть ли у вас достаточно ответа, чтобы исправить вашу проблему? Я немного изменил ваш код, чтобы действительно увидеть, что происходит:

function1() { echo "I am function 1" } function2() { echo "I am function 2" } opt=$1 case $opt in u) function1 ;; g) function2 ;; *) echo "Nothing to do" exit ;; esac

Я назвал файл dummyFunc, дал ему x-биты, и это результаты.

$ ./dummyFunc u I am function 1 $ ./dummyFunc g I am function 2 $ ./dummyFunc Nothing to do $

Я надеюсь, что это поможет dummyFunc ? [D1] Если нет, покажите нам, как выглядит ваш скрипт, и добавьте вывод, который он генерирует.

0
ответ дан 24 July 2018 в 20:22
  • 1
    Это не синтаксическая ошибка, просто опечатка. – wjandrea 25 April 2017 в 01:18
  • 2
    :-)) томаты помидоры ... – user 25 April 2017 в 01:30
  • 3
    Они технически разные. Синтаксическая ошибка дает код выхода 2. Ошибка команды, не найденная (вызванная опечаткой), дает код выхода 127. – wjandrea 25 April 2017 в 01:31
  • 4
    Это не почему функция 1 бросает ошибку, не так ли? – Zanna 25 April 2017 в 07:49
  • 5
    @wjandrea: извините, я думал, что вы шутите, потому что опечатка была настолько очевидной причиной. Кроме того, прошло уже полночь, поэтому я уже не был слишком ясен. Но действительно, вы правы. Типы и синтаксические ошибки - это совершенно разные вещи. – user 25 April 2017 в 12:29

Другие вопросы по тегам:

Похожие вопросы: