조건문이 if와 함께 작동하지 않습니다. 값을 정수로 변환하는 방법은 무엇입니까? 배쉬에서

조건문이 if와 함께 작동하지 않습니다. 값을 정수로 변환하는 방법은 무엇입니까? 배쉬에서

내가 겪고 있는 문제는 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

관련 정보