-1

重複の可能性:
Unix の基本的な検証

こんにちは、Unix にはかなり慣れていないので、入力した数値の合計を合計するプログラムに、文字が入力されたときにユーザーに通知するバリデーターを持たせようとしています。

たとえば、これは私がやりたいことです。

add2 4 -3 12 9 申し訳ありませんが、「12」は数字ではありません

これは私の現在のコードですが、誰かが間違っていることを教えてもらえますか?

 #!/bin/bash

 sum=0

 for numbers in $@

 if ![["$numbers" =~ ^[0-9]+$ ]]  

 then
    exec >&2; echo "error: numbers" exit 1
 fi

 do

 sum=$((sum + numbers))

 done

 echo "$sum"
4

2 に答える 2

2

脚本:

#!/bin/bash
sum=0
for number in $@
do
    if [[ $number =~ [0-9]+$ ]]
    then
        sum=`expr $sum + $number`
    else
        echo "error: $number is not a number"
        exit 1
    fi
done
echo "$sum"

サンプルラン:

$ ./sum.sh 1 2 3 4 5 6
21
$ ./sum.sh 1 2 3 4 5 6 seven
error: seven is not a number
于 2012-12-02T03:35:40.360 に答える
0

適切な bash プラクティスを使用して、つまり引用符を使用し、恐ろしいバッククォートを回避し、シェル演算を使用して実行します((...))

#!/bin/bash
sum=0
for number in "$@"; do
if [[ "$number" =~ ^[+-]?[[:digit:]]+$ ]]; then
    ((sum+=number))
else
    echo >&2 "error: $number is not a number"
    exit 1
fi
done

echo "$sum"
于 2012-12-02T10:27:45.260 に答える