bash脚本不在echo语句中显示$ strings

时间:2016-05-04 16:13:36

标签: linux bash echo

我正在学习Linux课程,我们正在讨论bash脚本。以下脚本应使用字符串值打印echo语句,但不会。

#/bin/bash

echo "Enter the first string"
read str1
echo "Enter the second string"
read str2
echo $str1
echo $str2
myLen1=${#str1}
myLen2=${#str2}

if [ ! -z $str1 ]; then
    echo Length of the first string is: $myLen1
else 
    echo Please enter a value for ${str1} with more than 0 characters
fi

if [ ! -z $str2 ]; then
    echo Length of the second string is: $myLen2
else 
    echo Please enter a value for $str2 with more than 0 characters
fi

我尝试了以下但没有成功:

echo Please enter a value for ${str2} with more than 0 characters

echo Please enter a value for "$str2" with more than 0 characters

echo "Please enter a value for $str2 with more than 0 characters"

echo "Please enter a value for ${str2} with more than 0 characters"

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你说你正在参加一个关于bash的Linux课程。因此,我将分享一些我希望对您有所帮助的一般性意见:

测试和调试
启动bash脚本bash -x ./script.sh或添加脚本set -x以查看调试输出。

<强>语法
正如@drewyupdrew所指出的那样,你需要在脚本顶部指定你正在使用的shell,如:#!/bin/bash(你错过了)。

您正在使用-z中的[ ! -z $str2 ]比较运算符。 -z运算符比较字符串是否为空,即长度为零。你否定了与!的比较。

执行此相同操作的更简洁方法是使用-n比较运算符。 -n运算符测试字符串是否为空。

此外,必须引用测试括号中的变量,即单[ ]个。使用带有! -z的未加引号的字符串,或者甚至只是测试括号中的未加引号的字符串通常有效,但这是一种不安全的做法。

因此,考虑到上述注释以及其他一些编辑,我想出了以下内容:

#!/bin/bash

echo "Enter the first string"
read str1
echo "Enter the second string"
read str2

echo "This is the first string: ${str1}"
echo "This is the second string: ${str2}"

myLen1=${#str1}
myLen2=${#str2}

if [ -n "$str1" ]; then
    echo "Length of the first string is: ${myLen1}"
else 
    echo "Please enter a value for the first string with more than 0 characters"
fi

if [ -n "$str2" ]; then
    echo "Length of the second string is: ${myLen2}"
else 
    echo "Please enter a value for the second string with more than 0 characters"
fi

这有帮助吗?

答案 1 :(得分:0)

在您尝试打印输入的脚本部分中,您刚刚断言输入不包含任何字符。因此,当变量展开时,它会扩展为空字符串,并且您看不到任何内容。