내가 가진 문제는 if 조건문이 작동하지 않는다는 것입니다. 값 유형과 관련이 있다고 생각합니다.
지금은 이 문제를 해결하는 방법을 몰랐지만 다음을 사용하여 테스트해 보세요.
var=T
if [ -n "$var" ] && [ "$var" -eq "$var" ] 2>/dev/null; then
echo number
else
echo not a number
fi
그리고 내 "번호"가 숫자가 아니라는 것을 보여주세요.
아래는 조건이 틀려도 항상 처음으로 들어가는 문제를 해결하는 스크립트입니다.
SENT="/home/trader/monitor2/ArchivosPruebas/CambiosLiquidacion5deUWT/Enviados.log";
RECEIVED="/home/trader/monitor2/ArchivosPruebas/CambiosLiquidacion5deUWT/Recibidos.log";
RESULT="/home/trader/CCVPending/Liquidaciones/Liquidaciones.log"
T0=$(cat $SENT | grep 63=1 | wc -l);T1=$(cat $SENT | grep 63=2 | wc -l);T2=$(cat $SENT | grep 63=3 | wc -l);T3=$(cat $SENT | grep 63=4 | wc -l);
T4=$(cat $SENT | grep 63=5 | wc -l);T5=$(cat $SENT | grep 63=9 | wc -l);TOTAL=$(($T0+$T1+$T2+$T3+$T4+$T5));
for i in 0 1 2 3 4 5; do
echo "------ T+$i -----" >> $RESULT
ii=$((1+$i)); if [ $i = 5 ]; then ii=9; fi;
T=$(($((T$i)))); echo T $T con i en 63=$ii
if [ $T -le 10 ] || [ $T -gt 0 ] ; then
echo if; cat $SENT | grep 63=$ii | grep 487=0 | sed "s/.*31=/Qty=/"|sed "s/.32=/,Price=/"|sed "s/.48=.*.55=/,Emisora=/"|sed "s/.60=.*.63=$ii/,T+0/"|sed "s/.487=.*.54=/,Side=/"|sed "s/.453=.*.448=/,Firm=/" | sed "s/.447=.*//" | grep -x "Qty=.*.,Price=.*.,Firm=[A-Z][A-Z]*.">> $RESULT
elif [ $T -le 30 ] || [ $T -gt 10 ] ; then echo elif
echo elif; cat $SENT | grep 63=$ii | grep 487=0 | sed "s/.*48=.*.55=/Emisora=/"|sed "s/.60=.*.448=/,Firm=/"| sed "s/.447=.*//" | grep -E "Emisora=[A-Z].*.,Firm=[A-Z][A-Z].*." >> $RESULT
else echo else;
echo $T >> $RESULT
fi
done
답변1
테스트 [ -n $T ]는 숫자가 아닌 0이 아닌 길이를 테스트하고 있습니다.
Paul--) T=7x7
Paul--) case "$T" in (+([[:digit:]])) echo "Y";; (*) echo "N";; esac
N
Paul--) T=787
Paul--) case "$T" in (+([[:digit:]])) echo "Y";; (*) echo "N";; esac
Y
더 간단한 테스트가 있지만 스크립트의 다른 부분에 영향을 미칠 수 있는 전역 셸 옵션을 설정해야 합니다.
Paul--) shopt -s extglob
Paul--) T=787
Paul--) [[ "$T" = +([0-9]) ]] && echo "Y" || echo "N"
Y
Paul--) T=7x7
Paul--) [[ "$T" = +([0-9]) ]] && echo "Y" || echo "N"
N