スクリプトでコマンドを使用してbash
ソーステキストファイルからデータを取得し、ここに変数値を追加してif / else条件で使用します。
ソースデータファイル(db_count.ini
)(注:二重引用符内にスペースがあります):
db_ctdy_sr=" 7"
スクリプト:
source db_count.ini
# Removing the whitespace on the stored data
n_db_sr=${db_ctdy_sr// /}
# Sum
c=0
b=7
echo "Value of db:"$n_db_sr
sm=$((n_db_sr + c))
echo "The value of db:"
echo "$sm"
echo $sm
if [ "$sm" = "$b" ]
then
echo "Success."
else
echo "Not."
fi
echo "Bye!"
ただし、スクリプトを実行すると、常に次のように表示されます。
The value of db:7
") Syntax error Invalid arithmetic operator (error token is "
The value of:
Not.
Bye!
どのようなヒントがありますか?どんな提案がありますか?
ありがとうございます!
答え1
スクリプトはここで実行されます。報告したのと同じエラーが発生する唯一の方法は、変数に次のものをdb_ctdy_sr
含めることですnew line
。
新しい行を追加:
source db_count.ini
db_ctdy_sr=$' 7\r'
次にスクリプトをテストします。
$ ./so
Value of db:7
")syntax error: invalid arithmetic operator (error token is "
The value of db:
//test if working
//test if working
Not.
Bye!
ファイルにDOSキャリッジリターン文字が含まれていると、db_count.ini
この現象が発生する可能性があります。
実装する:
$ sed -n l db_count.ini
db_ctdy_sr= 7\r$
\r
(または同様の)ファイルを表示するには。
ファイルを編集し、失敗した文字を削除するか、次の行を変更してキャリッジリターンを削除します。
n_db_sr=${db_ctdy_sr// /}
到着する:
n_db_sr=${db_ctdy_sr//[ $'\r'}]}
あるいは、より一般的には、すべての制御文字を削除します。
n_db_sr=${db_ctdy_sr//[ $'\001'-$'\037']}
組み合わせ順序がASCII値の予想順序を1(8進数001)から31(8進数037)まで変更しないようにするには、bash変数を設定します。
shopt -s globasciiranges
bashバージョン4.3から利用可能です。