質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

4回答

556閲覧

shellを実行したい。(勉強中です)

jin007

総合スコア34

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2019/06/17 05:28

編集2019/06/17 09:25

shellスクリプトの勉強をしています。

以下のシェルを実行したいのですが、

FRUIT = SYURUI FRYUITINFO = SYURUI echo "START -----" case ${FRUIT} in SYURUI ) FRUITINFO = ${FRUIT} echo "FRUITINFO = `FRUITINFO`" echo "----- END"

追記 修正後 動いた!

FRUIT=SYURUI FRYUITINFO=SYURUI echo "START -----" case ${FRUIT} in SYURUI ) FRUITINFO=${FRUIT} esac echo "FRUITINFO=`FRUITINFO`" echo "----- END"

▽実行結果

shTest.sh: 行 1: FRUIT: コマンドが見つかりません shTest.sh: 行 2: FRYUITINFO: コマンドが見つかりません START ----- shTest.sh: 行 13: 構文エラー: 予期しないファイル終了 (EOF) です

と出ます。

エラーのエラーの原因を理解できないのでご教授願います。

足りない情報はその都度補足いたします。

メモ

・shellは空白はNG
・case文は「esac」で閉じる。

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

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

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

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

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

guest

回答4

0

シェル変数への代入は、FRUIT=SYURUIのように、スペースを入れずに書いてください。入れると(ちょうど発生したエラーのように)コマンド名だと認識されてしまってうまくいきません。

投稿2019/06/17 05:30

maisumakun

総合スコア145183

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

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

jin007

2019/06/17 05:51

スペースを入れずに書き実行したところ、上記と同じエラー文がでました。 推測ですが、 case文の${FRUIT}の部分で振り分けられずに落ちいてるのでしょうか?
maisumakun

2019/06/17 05:52

「FRUIT: コマンドが見つかりません」も出続けているのでしょうか?
jin007

2019/06/17 05:53

すみません、それは消えました! ================== START----- shTest.sh: 行 13: 構文エラー: 予期しないファイル終了 (EOF) です
mather

2019/06/17 06:37

修正したあとのコードがどうなっているかわからないので、修正した現在のコードは質問に追記しましょう。
jin007

2019/06/17 09:21

↑閉じたら実行できました、有難うございます!
guest

0

shellは空白はNG

空白がNGというより、コマンドとの区別がつかなくなるのです。

hoge = fuga

と書いた場合、 hoge コマンドに =fuga をコマンドライン引数とする呼び出しと解釈されてしまいます。
echo = fuga と書いてみればわかりやすいかもしれません。
そのため、変数への代入では構文上空白を使うことができないのです。
また、値そのものに空白文字が入る場合はダブルクォーテーションで囲うべきですし、普段からつけたほうが良いです。

hoge="fuga" test="hoge hoge"

投稿2019/06/17 09:33

mather

総合スコア6753

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

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

jin007

2019/06/18 02:56

ありがとうございます! ただ空白がNGではなく何故NGなのか理解ができました!
guest

0

まずはshの種類を確定して1行目で宣言してください

投稿2019/06/17 05:29

yambejp

総合スコア114769

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

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

jin007

2019/06/17 05:49

shの種類を宣言とは、 PNAME=shellの名前 の書き方であっていますでしょうか?
hentaiman

2019/06/17 06:28

# /bin/bash みたいなやつのことですよ 「bash ファイル名」という形でコマンド打つなら書いても書かんでも実行できますがが、大抵の人は書きます。
jin007

2019/06/17 09:21

記載して、case文の閉じるコマンドを入れたら動きました!有難うございます!
guest

0

自己解決

FRUIT=SYURUI FRYUITINFO=SYURUI echo "START -----" case ${FRUIT} in SYURUI ) FRUITINFO=${FRUIT} esac echo "FRUITINFO=`FRUITINFO`" echo "----- END"

メモ

・shellは空白はNG
・case文は「esac」で閉じる。

投稿2019/06/17 09:25

jin007

総合スコア34

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

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

jin007

2019/06/18 02:58

>>shellは空白はNG →空白を入れてしまうと「代入」ではなく、コマンドラインの引数として扱われるので本来の目的の動きがされない。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問