【问题标题】:Printing correct output in shell script在 shell 脚本中打印正确的输出
【发布时间】:2017-04-21 06:03:18
【问题描述】:

我有以下代码

#!/bin/sh
echo "hello"
echo "enter salutation $abc"
Read -r abc
If [ "$abc" = "1" ] 
Then 
Echo "hiii"
Elif [ "$abc" = "2"]
Then
Echo "no hi"
Fi
Echo "enter name $xyz"
Read -r xyz
If [ "$xyz" = "1" ]
Then 
Echo "Chris"
Elif ["$xyz" = "2" ] 
Then 
Echo "Morris"
Fi
Echo "final data"
Echo " you entered salutation as " "$abc"
Echo "you entered name as "$xyz"

输出如下

Hello
Enter the number 
1
Hiii
Enter name
1
Chris 

You entered salutation as 1
You entered name as 1

我想要的是

You entered salutation as hii
You entered name as chris

【问题讨论】:

  • 请发布您的实际代码。您显示的不是有效的 shell 脚本语法,甚至不会运行。
  • 这不是一个有效的 shell 脚本。您确定这是您为获得该输出而编写的正确脚本吗?
  • 考虑通过shellcheck.net 运行您的代码并在此处提问之前修复它发现的问题。

标签: linux bash shell


【解决方案1】:

您似乎正在使用编号输入从预先安排的选项中进行选择;在这种情况下,当用户选择一个数字时,您可以使用该数字根据您想要的值分配一个变量。

#!/bin/sh

echo "hello"

echo "enter salutation: 1 for hiii and 2 for no hi"
read -r salutation
case $salutation in
        1) salutation="hiii";;
        2) salutation="no hi";;
        *) echo "Only 1 or 2 can be specified"; exit 1;;
esac


echo "enter name: 1 for Chris, and 2 for Morris"
read -r name
case $name in
        1) name="Chris";;
        2) name="Morris";;
        *) echo "Only options 1, or 2 are supported"; exit 2;;
esac


echo "final data"
echo "you entered salutation as $salutation"
echo "you entered name as $name"

在您的条件中,您应该将值分配给变量,而不仅仅是打印出来。然后,您可以稍后使用该变量。

【讨论】:

  • 这与按原样运行相去甚远。 (shellcheck.net 会发现许多尚未解决的问题 - 其中许多 if 条件永远不会导致任何错误,而不是错误)。
  • @CharlesDuffy 有很多问题,是的。尽管如此,此脚本仍可作为我机器上请求的操作 :)
  • ...只是因为他们只测试了一小部分可能的代码路径。例如,[ "$abc" -eq "2"]永远不会成功——如果xyz 不为空,["$xyz" -eq "2" ] 甚至不会调用[
  • 让我进一步指出stackoverflow.com/help/how-to-answer的“回答好问题”部分
  • 同意。我做了最低限度的要求,让它响应操作所请求的操作指定的输入...修复脚本是操作的练习
【解决方案2】:

您的代码不起作用,因为您打印的变量 $abc 和 $xyz 包含 1 或 2,而不是字符串。如果您有更多疑问,请告诉我。

#!/bin/sh
echo "Hello, enter a number for salutation:"
read -r abc
if [ $abc = 1 ] 
then 
    Salutation="hiii"
elif [ $abc = 2 ]
then
    Salutation="no hi"
fi
echo "enter number 1 or 2 for name:"
read -r xyz
if [ "$xyz" = "1" ] 
then 
    Name="Chris"
elif ["$xyz" = "2" ] 
then 
    Name="Morris"
fi
echo "final data"
echo "you entered salutation as $Salutation"
echo "you entered name as $Name"

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多