🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

1519閲覧

ラズパイ Syntaxエラー

raspypy

総合スコア247

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/10/21 05:34

編集2019/10/21 07:44

##教えてほしいこと

次のプログラムコード(シェルスクリプト)を実行すると、syntaxエラーが発生します。
syntaxエラーの原因が分からないため、教えてほしいです。

##プログラムコード

html

1#!/bin/bash 2 3POST_URL=https://connect.codyltech.com/connectors/webhook/push/geE6Ax0GQMKg-3Bi5z06Kw/VsCgp8ovRbCotPPHPE1BZQ 4 5T_P_H=(`/home/pi/dev/BME280.py | awk '{print $3}'`) 6 7echo '{"temp":"'${T_P_H[0]}'","pres":"'${T_P_H[1]}'","hum":"'${T_P_H[2]}'"}' 8 9curl -X POST -H "Content-type:application/json" -d @- $POST_URL

##発生しているエラー

html

1BME280.sh: 6:BME280.sh: Syntax error: "(" unexpected

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuii

2019/10/21 07:01

/home/pi/dev/BME280.py を実行するとどういう出力がされるのですか? 複数行文字列でしょうか?/home/pi/dev/BME280.pyは実行権限はついていますか?
ryuii

2019/10/21 07:19

GitHubで該当するソースコードがありましたので、回答しました。
raspypy

2019/10/21 07:28

返信ありがとうございます。 BME280.pyを実行すると、 temp : 25.38 ℃ pressure : 989.07 hPa hum : 50.17 % 3行で結果が表示されます。 BME280.pyには実行権限はついております。 質問のコードを最新に修正させていただきますが、このコードでも同様にエラーがでてしまいます。
raspypy

2019/10/21 07:40

コンソール画面で1行ずつ実行していき、 echo '{"temp":"'${T_P_H[0]}'","pres":"'${T_P_H[1]}'","hum":"'${T_P_H[2]}'"}' を実行したとき、 T_P_H=(`/home/pi/dev/BME280.py | awk '{print $3}'`) と記述すると、 {"temp":"25.30","pres":"989.11","hum":"50.26"}  と正しく表示されますが、 T_P_H=(`/home/pi/dev/BME280.py | awk -F'\n' '{print $0}'`) と記述すると、 {"temp":"temp","pres":":","hum":"25.26"} というように温度データしか拾ってきません。 print $0だからでしょうか?
ryuii

2019/10/21 07:42

正しく表示される方で良いと思います!
raspypy

2019/10/21 07:45

返信ありがとうございます。 そうすると、最初のコードのまま、エラーの原因が分かりません。 sh BME280.shで実行すると、syntaxエラーとなりますが、 ./ BME280.shで実行すると、エラーが発生しません。 なぜでしょうか。
ryuii

2019/10/21 07:47

bash BME280.sh ではどうですか?
raspypy

2019/10/21 08:01

./ BME280.shと同じく、エラーが発生しません。 なぜでしょうか。
ryuii

2019/10/21 08:13

shとbashの違いはなかなか難しいので、調べてみてください。 sh BME280.sh は shで実行されます。 ./BME280.sh は1行目にbashの記述があるので、 bash BME280.sh と同じように実行されます。 なので、今回はbashして実行するという前提で回答しました。
guest

回答1

0

ベストアンサー

Pythonスクリプトを実行できていないためだと思います。

$ chmod +x /home/pi/dev/BME280.pyで実行権限を与えます。

この部分でPythonで起動できるようになるので、Syntax Errorはなくなると思います。
T_P_H=(`/home/pi/dev/BME280.py | awk '{print $3}'`)

複数行の出力を配列に格納するときは以下のように変更することでできるようになると思います。
T_P_H=(`/home/pi/dev/BME280.py | awk -F'\n' '{print $0}'`)
あるいは、
T_P_H=(`python /home/pi/dev/BME280.py | awk -F'\n' '{print $0}'`)

投稿2019/10/21 07:13

ryuii

総合スコア438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問