データベースに接続し、テーブルの行数を返すクエリを実行するスクリプトを作成しようとしています。時にはデータベースやテーブルに問題があり、整数の代わりにエラーを返すことがあります。例:
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
。値はcount
11 です。
アップデート:
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