「コマンドが見つかりません」のため、bash文字列の比較が失敗します。

「コマンドが見つかりません」のため、bash文字列の比較が失敗します。

さまざまなユーザー入力に基づいてマルチオプションのテキストベースのストーリーを完成させたいです。さまざまなステートメントをテストし、VIエディタを使用してスクリプトの作成を開始する面白いプロジェクトのように見えますが。 (私は非常に技術的ではありませんし、スクリプトの経験もありません)。

これが私が得るものです:

ここに画像の説明を入力してください。

しかし、表示される結果は次のようになるため、結果を生成する最後のechoステートメントを取得できません。

ここに画像の説明を入力してください。

文字の代わりに数字になるように「if」文で「input_user_name」として「0」(数字)を使ってみましたが、役に立たなかった。何が間違っているのかよくわかりません(ため息)。これは非常に簡単な修正です。

答え1

if ($input_user_name == 'n'); ...

括弧は次に使用されます。コマンドのグループ化、これは宣言にはあまり役に立ちませんif。 (何らかの理由でサブシェルが必要な場合を除き)実際にはこれと同じであり、結果をif $input_user_name == 'n';拡張input_user_name、分割、およびワイルドカードしてコマンドとして実行します。一度入力すると、シェルはBruceコマンドを実行しますBruce

答え2

これについていくつかの仮定をしていますが、コードを次のように修正しました。

#! /bin/bash -
clear
echo -e "\nWelcome, $(whoami)\nShall we change this to something more appropriate?"
read -rp "If not enter input 'n' and press [ENTER] " input_user_name

if [[ "$input_user_name" == 'n' ]]; then
        user_name="$(whoami)"
else
        user_name="$input_user_name"
fi

echo "You are ${user_name}!"

最初の数行をnewline、tab、その他の特殊文字を許可する1echo行に変更しました。echo -e\n\t

readまた、ステートメントを1行に変更し、-rバックスラッシュが壊れるのを防ぐためにスイッチを追加しました。

正当なテストを実行しないため、10行目でエラーが発生します。角かっこを使用する場合、または丸括弧の代わりに可能な場合は、[角かっこを使用する必要があります。[[

また、シェル/バッシュ構文では、このように変数割り当てにスペースを入れることはできません。次のようにする必要があります。

variable=value

いいえ

variable = value

または

$variable = value

など

答え3

()の代わりに角括弧[]を使用してください。

#!/bin/bash
set +x


clear
echo
echo "Welcome, $(whoami)"
echo

echo "Shall we change this to something more appropriate?"
echo "if no,simply enter 'n' then press [Enter]:"
read input_user_name

if [ $input_user_name == "n" ];
then user_name=`whoami`   ## i have used `` to get the value of whoami
else

user_name=$input_user_name
fi

echo "Your $user_name !"

出力:

Welcome, vikasven

Shall we change this to something more appropriate?
if no,simply enter 'n' then press [Enter]:
Vikas
Your Vikas !

答え4

then user_name = $whoamiに変更then user_name=$(whoami)

関連情報