出力が文字列か整数かを確認する

出力が文字列か整数かを確認する

データベースに接続し、テーブルの行数を返すクエリを実行するスクリプトを作成しようとしています。時にはデータベースやテーブルに問題があり、整数の代わりにエラーを返すことがあります。例:
A database connection does not exist
出力が必要な整数であるかエラーであるかを確認したいと思います。さまざまな投稿を検索しましたが、どちらも私のスクリプトでは機能しませんでした。どうすればいいですか?

DB2PATH=/bin/db2
$DB2PATH connect to $1 >> /dev/null
count=$($DB2PATH -x " select count(*) from TEST122 ")


if ! [[ "$count" =~ ^[0-9]+$ ]]
then
    echo "string"
else
    echo $count
fi

私はさまざまな方法でif条件を変更しました。私はと-eqを使用しました-ne。ずっと戻ってきていますstring。値はcount11 です。

アップデート:
printf '%s' "$count" | hexdump -c 出力:

0000000                                       1   1
000000b

ベストアンサー1

数字の前後のスペースを無視して切り捨てるには、次のようにします。

if [[ $count =~ ^[[:space:]]*([[:digit:]]+)[[:space:]]*$ ]]; then
  echo number
  count=${BASH_REMATCH[1]}
else
  echo other
fi

または標準sh構文を使用します。

trimmed=${count#"${count%%[![:space:]]*}"}
trimmed=${trimmed%"${count##*[![:space:]]}"}
case $trimmed in
  ("" | *[![:digit:]]*) echo other;;
  (*) echo number; count=$trimmed;;
esac

おすすめ記事