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

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

新規登録して質問してみよう
ただいま回答率
85.31%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

1回答

1340閲覧

シェルスクリプトでcommand not foundが発生する理由・対処法を知りたい。

megumi199810

総合スコア1

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2023/09/21 08:39

実現したいこと

<実行結果>
現状→./ensyu11_3_2: line 19:  echo入力値が無効です: command not found
正→echo入力値が無効です
要件を満たした上で、現状から正になるようにスクリプト内容を変更したいです。

要件

ディレクトリを作成する際、「処理を実行してもよろしいですか?」と質問し、
「yes」または「y」と入力した場合のみディレクトリを作成するスクリプトに改善しなさい。
なお「no」または「n」と入力した場合は、「処理をキャンセルしました」と表示させ、それ以外の場合は、「入力値が無効です」と表示すること。

前提

上記の要件を満たすシェルスクリプトを作成しております。
スクリプト作成後に実行したところ、
要件は満たしてはいるがエラーも同時に表示されている状態が発生しました。

発生している問題・エラーメッセージ

if文の条件分岐を用いて3パターンの実行結果になるよう作成を行いました。
①yes or yを入力→ディレクトリを作成
②no or nを入力→"処理をキャンセルしました。"表示
③それ以外を入力→"入力値が無効です。"
前提での説明と被ってしまうのですが、改善したい事としては
実行結果自体は要件を満たしていますが、同時に"command not found"エラー文があるためエラー解消したいです。

実行結果(エラー)

<パターン①>
[ infrauser@infrastd1s:~/infradir99 ] ./ensyu11_3_2
ディレクトリ名を入力してください。
test
処理を実行してもよろしいですか?
yes
./ensyu11_3_2: line 15: echoディレクトリを作成しました。: command not found

<パターン②>
[ infrauser@infrastd1s:~/infradir99 ] ./ensyu11_3_2
ディレクトリ名を入力してください。
test
処理を実行してもよろしいですか?
no
./ensyu11_3_2: line 17: 処理をキャンセルしました。: command not found

<パターン③>
[ infrauser@infrastd1s:~/infradir99 ] ./ensyu11_3_2
ディレクトリ名を入力してください。
test
処理を実行してもよろしいですか?
aaa
./ensyu11_3_2: line 19:  echo入力値が無効です: command not found

該当のソースコード(スクリプト)

#!/bin/sh

STR1=yes
STR2=yes
STR3=no
STR4=n

echo "ディレクトリ名を入力してください。"
read ndir;
echo "処理を実行してもよろしいですか?"
read say;

if [ ${STR1} = ${say} -o ${STR2} = ${say} ]; then
mkdir -p $ndir;
echo'ディレクトリを作成しました。'
elif [ ${STR3} = ${say} -o ${STR4} = ${say} ]; then
echo'処理をキャンセルしました。'
else
echo'入力値が無効です'
fi

~
~
"./ensyu11_3_2" 21L, 443C

試したこと

①スペルミスが無いか確認・スクリプトの書き直し。
②echo"入力値が無効です"→echo'入力値が無効です'
(ダブルクォーテーション→シングルクォーテーションに変更)⇒詳しい理由は分かりかねますが、WEB上の例題を流用しました。
③if文[]内の前後にスペースを入れた。

どのようにコマンドを使ったらいいかわかっておらず、WEBで同じエラーが発生した時の対処法を試していました。
絶対パスを使用する対処法もありましたが、あまり理解ができておらずスルーしております…。

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

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

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

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

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

toge_

2023/09/21 08:49 編集

> echo'ディレクトリを作成しました。' > echo'処理をキャンセルしました。' > echo'入力値が無効です' のechoの後ろにスペース入れましょう。 それだけで一歩進められると思います。
otn

2023/09/21 08:58

同じく。「echo入力値が無効です」という長い名前のコマンドがないというエラーメッセージです。 コマンド名と、オペランド(引数というか)の間には空白かタブが必要です。
guest

回答1

0

diff

1-echo'入力値が無効です' 2+echo '入力値が無効です'

エラーメッセージのとおり、スペースがないとecho以降もコマンドと解釈されてしまいます。

投稿2023/09/21 08:59

maisumakun

総合スコア146543

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問