bash 字符串比较失败,“找不到命令”

bash 字符串比较失败,“找不到命令”

我正在尝试根据各种用户输入来完成一个基于多选项文本的故事。尽管这似乎是一个有趣的项目,可以测试各种语句,并开始使用 VI 编辑器编写脚本。 (我不想成为超级技术专家,也没有脚本编写经验)。

这就是我得到的:

在此输入图像描述

然而;我无法让最后一个 echo 语句产生结果,因为出现的结果是:

在此输入图像描述

我尝试在“if”语句中使用“0”(数字)作为“input_user_name”,这样它将是一个数字而不是字母,但无济于事。不太确定出了什么问题(叹气)。这可能是一个超级简单的修复(我猜)。

答案1

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

括号用于命令分组,这在声明中不是很有用if。 (除非您出于某种原因需要子 shell。)在实践中,这与 , 相同if $input_user_name == 'n';,并且扩展input_user_name、分割和通配结果,并将其作为命令运行。你输入后Bruce,shell 就会运行该命令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}!"

我已将您的前几echo行更改为一行echo -e,允许使用特殊字符,例如 newline \n、 tab\t和其他一些字符。

我还将您的read语句更改为单行,并添加了-r开关,以防止它破坏任何反斜杠。

您在第 10 行收到错误是因为您没有进行合法的测试。您需要使用方括号[或最好[[代替圆括号。

同样,在 shell/bash 语法中,您不能以这种方式在变量赋值中放置空格。它需要是:

variable=value

不是

variable = value

或者

$variable = value

ETC

答案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 = $whoamithen user_name=$(whoami)

相关内容