как настроить запуск программы на основе типа файла, а не имени файла

Вы используете буквы для индексации значений, если бы вы использовали числа, это было бы так же просто, как:

code=1
set -- com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm

eval pn\=\${"$code"}

Это переносимый шелл-код, который будет работать на большинстве шеллов.
Для bash вы можете использовать :pn=${!code}, а для bash/ksh/zsh использовать:pn=${@:code:1}.

буквы

Если вы должны использовать буквы (от a до z или от A до Z ), они должны быть преобразованы в индекс:

code=a                              # or A, B, C,... etc.
set -- com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm
eval pn\=\"\${$(( ($(printf '%d' "'$code")|32)-96  ))}\"

В более длинном коде для уточнения назначения и значения каждой части:

code=A

set -- com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm

asciival=$(( $(printf '%d' "'$code") ))      # byte value of the ASCII letter.
upperval=$(( asciival |  32 ))               # shift to uppercase.
indexval=$(( upperval -  96 ))               # convert to an index from a=1.
eval arg\=\"\$\{$indexval\}\"                # the argument at such index.

Если вам нужно преобразовать значения в нижний регистр, используйте:$(( asciival & ~32 ))(убедитесь, что бит 6 значения ascii не установлен ).

код ошибки

Вывод, который ваш сценарий выводит при ошибке, довольно длинный (и конкретный ).
Самый универсальный способ справиться с этим — определить функцию:

errorcode(){ exitcode=$1; shift; printf '\a\t %s\n' "$@"; exit "$exitcode"; }

А затем вызовите эту функцию с конкретным сообщением (s ), которое вам нужно.

errorcode 27  "ERROR!" "CODE KOSONG" "MELAKUKAN EXIT OTOMATIS"

Обратите внимание, что результирующее значение выхода даетсяexitcode(пример здесь 27 ).

Полный скрипт (с проверкой ошибок )становится:

errorcode(){ exitcode=$1; shift; printf '\a\t %s\n' "$@"; exit "$exitcode"; }

code=${1:-A}

case "$code" in 
    [a-d]|[A-D]) : ;;
    *)           errorcode 27  "ERROR!" "CODE KOSONG" "MELAKUKAN EXIT OTOMATIS" ;;
esac

set -- com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm
eval pn\=\"\${$(( ($(printf '%d' "'$code") & ~32) - 64  ))}\"

printf 'Code=%s Argument=%s\n' "$code" "$pn"
0
22.08.2021, 14:56
0 ответов

Теги

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