Я использую следующее:
using System.Web.Script.Serialization;
...
public static T ParseResponse<T>(string data)
{
return new JavaScriptSerializer().Deserialize<T>(data);
}
You might want to take a look at the trap
builtin to see if it would be helpful:
help trap
or
man bash
you can set a trap for errors like this:
#!/bin/bash
AllowedError=5
SomeErrorHandler () {
(( errcount++ )) # or (( errcount += $? ))
if (( errcount > $AllowedError ))
then
echo "Too many errors"
exit $errcount
fi
}
trap SomeErrorHandler ERR
for i in {1..6}
do
false
echo "Reached $i" # "Reached 6" is never printed
done
echo "completed" # this is never printed
If you count the errors (and only when they are errors) like this instead of using "$?
", then you don't have to worry about return values that are other than zero or one. A single return value of 127, for example, would throw you over your threshold immediately. You can also register trap
s for other signals in addition to ERR
.
Быстрый эксперимент и погружение в информацию bash говорит:
declare -i RESULT=$RESULT + $?
, поскольку вы добавляете результат несколько раз, вы можете использовать объявление в начале, например:
declare -i RESULT=0
true
RESULT+=$?
false
RESULT+=$?
false
RESULT+=$?
echo $RESULT
2
, что выглядит много очиститель.
declare -i
говорит, что переменная является целочисленной.
В качестве альтернативы вы можете избежать объявления и использования скобок в арифметических выражениях:
RESULT=$(($RESULT+$?))
Используйте конструкцию $ ((...))
.
$ cat st.sh
RESULT=0
true
RESULT=$(($RESULT + $?))
false
RESULT=$(($RESULT + $?))
false
RESULT=$(($RESULT + $?))
echo $RESULT
$ sh st.sh
2
$
О том, как складывать числа в Bash, также смотрите:
help let
Вот несколько способов выполнить добавление в bash или sh:
RESULT=`expr $RESULT + $?`
RESULT=`dc -e "$RESULT $? + pq"`
И некоторые другие только в bash:
RESULT=$((RESULT + $?))
RESULT=`bc <<< "$RESULT + $?"`
В любом случае статус выхода при ошибке не всегда равен 1, и его значение равно не зависят от уровня ошибки, поэтому в общем случае нет особого смысла сравнивать сумму статусов с порогом.
Как сказал Мувичиел, сбор суммы кодов возврата выглядит бессмысленным. Возможно, вы можете использовать массив для накопления ненулевых кодов результата и проверки его длины. Пример этого подхода приведен ниже:
#!/bin/sh
declare RESULT
declare index=0
declare ALLOWED_ERROR=1
function write_result {
if [ $1 -gt 0 ]; then
RESULT[index++]=$1
fi
}
true
write_result $?
false
write_result $?
false
write_result $?
echo ${#RESULT[*]}
if [ ${#RESULT[*]} -gt $ALLOWEDERROR ]
then echo "Too many errors"
fi
Если вы хотите использовать ALLOWEDERROR в своем скрипте, поставьте перед ним знак $, например $ ALLOWEDERROR.