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