Предположим, что у вас есть JSON, подобный этому
[
{
"type": "qrcode",
"symbol": [
{
"seq": 0,
"data": "HelloWorld9887725216",
"error": null
}
]
}
]
Чтобы разобрать вышеупомянутый JSON в единстве, вы можете создать такую модель JSON.
[System.Serializable]
public class QrCodeResult
{
public QRCodeData[] result;
}
[System.Serializable]
public class Symbol
{
public int seq;
public string data;
public string error;
}
[System.Serializable]
public class QRCodeData
{
public string type;
public Symbol[] symbol;
}
И затем просто проанализировать следующим образом ...
var myObject = JsonUtility.FromJson("{\"result\":" + jsonString.ToString() + "}");
Теперь вы можете изменить JSON / CODE в соответствии с вашими потребностями. https://docs.unity3d.com/Manual/JSONSerialization.html
Добавьте это в начало скрипта:
set -e
Это приведет к немедленному завершению работы оболочки, если простая команда выходит с ненулевым значением выхода. Простой командой является любая команда, не являющаяся частью if, while или до теста или частью & amp; & amp; или || list.
Для получения дополнительной информации см. справочную страницу bash (1) для внутренней команды.
Я лично запускаю почти все сценарии оболочки с помощью "set -e". Это очень раздражает, когда сценарий упрямо продолжается, когда что-то терпит неудачу в середине и ломает предположения для остальной части скрипта.
Запустите его с помощью -e
или set -e
вверху.
Также посмотрите set -u
.
help set
: -u
рассматривает ссылки на неустановленные переменные как ошибки.
– mklement0
16 April 2013 в 05:31
Если у вас есть очистка, которую вы должны сделать при выходе, вы также можете использовать «ловушку» с ERR псевдосигнала. Это работает так же, как захват INT или любого другого сигнала; bash выбрасывает ERR, если какая-либо команда выходит с ненулевым значением:
# Create the trap with
# trap COMMAND SIGNAME [SIGNAME2 SIGNAME3...]
trap "rm -f /tmp/$MYTMPFILE; exit 1" ERR INT TERM
command1
command2
command3
# Partially turn off the trap.
trap - ERR
# Now a control-C will still cause cleanup, but
# a nonzero exit code won't:
ps aux | grep blahblahblah
Или, особенно если вы используете «set -e», вы можете заблокировать EXIT; тогда ваша ловушка будет выполнена, когда сценарий выйдет по какой-либо причине, включая нормальный конец, прерывания, выход, вызванный параметром -e и т. д.
просто бросает в другой для ссылки, так как есть дополнительный вопрос для ввода Mark Edgars, и вот еще один пример и касается общей темы:
[[ `cmd` ]] && echo success_else_silence
, которая совпадает с cmd || exit errcode
, как показал кто-то.
, например. Я хочу убедиться, что раздел отключен, если установлен:
[[ `mount | grep /dev/sda1` ]] && umount /dev/sda1
[[
cmd`]] `не то же самое. Это неверно, если вывод команды пуст и истинен в противном случае, независимо от состояния выхода команды.
– Gilles
22 September 2012 в 23:42
Выражение, подобное
dosomething1 && dosomething2 && dosomething3
, прекратит обработку, когда одна из команд вернется с ненулевым значением. Например, следующая команда никогда не будет печатать «done»:
cat nosuchfile && echo "done"
echo $?
1
Переменная $?
редко требуется. Псевдо-идиома command; if [ $? -eq 0 ]; then X; fi
всегда должна быть записана как if command; then X; fi
.
Случаи, когда требуется $?
, необходимо проверить на несколько значений:
command
case $? in
(0) X;;
(1) Y;;
(2) Z;;
esac
или когда $?
необходимо повторно использовать или иным образом манипулировать:
if command; then
echo "command successful" >&2
else
ret=$?
echo "command failed with exit code $ret" >&2
exit $ret
fi
Чтобы добавить к принятому ответу:
Помните, что иногда set -e
недостаточно, особенно если у вас есть трубы.
Например, предположим, что у вас есть этот скрипт
#!/bin/bash
set -e
./configure > configure.log
make
... который работает так, как ожидалось: ошибка в configure
прерывает выполнение.
Завтра вы делаете кажущееся тривиальное изменение:
#!/bin/bash
set -e
./configure | tee configure.log
make
... и теперь это не работает. Это объясняется здесь здесь , и предусмотрено обходное решение (только Bash):
#!/bin/bash set -e set -o pipefail ./configure | tee configure.log make
pipefail
согласился с set -o
!
– Malcolm
26 April 2018 в 16:48
Операторы if в вашем примере не нужны. Просто сделайте это так:
dosomething1 || exit 1
Если вы берете совет Ville Laurikari и используете set -e
, то для некоторых команд вам может понадобиться использовать это:
dosomething || true
Кнопка || true
приведет к тому, что конвейер команды получит возвращаемое значение true
, даже если команда не будет выполнена, поэтому опция -e
не будет убивать скрипт.
bash script.sh
. – Tom Anderson 3 December 2010 в 15:26