检索单个 int 值中包含 0 的数字

检索单个 int 值中包含 0 的数字

在我的脚本中,我需要获取0<=9 的数字。当用户输入任何数字时,我会在其中添加 5,如果结果小于 9,我需要打印 0 以获得 2 位数字(例如 07,08,09 等)。

我为此编写了一个函数,但脚本不断返回相同的数字“0?”一遍又一遍地循环。

我的脚本:

echo "Hora: "

read hora

Hora=$((hora+05))

Change () {
if [ $Hora -le 9 ]; then sed -e 's/^/0'$Hora'/'; return $Hora; fi
}

Change

echo -e "$Hora"

输出:

~$ bash test.sh
Hora:
4

09

09

09

09

09

答案1

您的脚本存在很多问题,但主要的问题是您没有向sed命令提供任何输入。如果你只是运行sed 's/foo/bar/',那么sed将期望输入标准输入并且每次点击 时都会继续运行Enter。由于它没有从您那里获得任何输入,而是换行符(当您点击 时Enter,您将发送一个空行,它只是一个\n字符),因此它将将该脚本应用于该输入。在这里,您告诉它0$Hora在行的开头添加 a,这就是它的作用。

您的代码中还存在其他问题。一方面,您不需要做return()任何事情,因为您正在处理全局变量。事实上,您甚至不需要sed在这里,您可以简单地在 shell 本身中连接。这是脚本的工作版本:

## It is good practice to have the functions at the beginning
## of your script.
Change () {
        if [ $Hora -le 9 ]; then
                Hora="0$Hora"
        fi
}

echo "Hora: "
read hora

Hora=$((hora+05))

Change

printf ":$Hora"

请注意,在您展示的简单情况下,使用函数是没有意义的。函数通常用于在脚本的不同点多次重复操作。如果您需要做的就是0在数字小于 10 时打印 a,则可以使用printf它本身:

printf "Hora: "
read Hora
printf '%0.2d' "$Hora"

最后,您可能还需要考虑添加一些测试以确保您的用户提供有效的输入。看如何在 Bash 中测试变量是否为数字?

相关内容