さまざまなユーザー入力に基づいてマルチオプションのテキストベースのストーリーを完成させたいです。さまざまなステートメントをテストし、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)