Bash - 如何检测变量是否超过一定数量的字符

Bash - 如何检测变量是否超过一定数量的字符
#/bin/bash
echo "This message may not be more than 8 characters"
read detect

我如何检测字母的数量?会是 IF 语句吗?

if #detect var
then
else
fi

编辑:如何让它重复直到用户输入正确的消息?

答案1

您可以使用如果-那么-否则-fi像这样:

if [[ ${#detect} -gt 8 ]] ; then
    echo "Error message..."
    exit 1
else
    echo "Good to go..."
    exit 0
fi

exit 1通常表示失败,exit 0通常表示成功。无论哪种情况,遇到时脚本都会立即结束,exit因此请适当使用它们。

您还可以使用隐含如果-那么这对于 shell 语言来说相当独特:

[[ ${#detect} -gt 8 ]] && { echo "Error message..." ; exit 1 ; }

# successful code here
exit 0

如果您不需要错误消息,{ ... }则单个命令不需要括号,例如:

[[ ${#detect} -gt 8 ]] && exit 1

可以用来表示“如果名为 detect 的变量 > 8 则退出”。


改善流程

一般来说,只给用户一次输入字符串的机会被认为是不礼貌的。礼貌的方法是告诉用户字符串长度不得超过 8 个字符,然后再次询问。例如:

echo "Enter character string 1 to 8 characters long or press <CTRL>+C to exit."
while True ; do
    read StringVar
    [[ ${#StringVar} -ge 1 ]] && [[ ${#StringVar} -le 8 ]] && break
    echo "Sorry that string is ${#StringVar} long. Please try again."
done

# successful code here

在这种情况下,程序会不断请求输入,直到StringVar获得变量,并且大于或等于 1 这是小于或等于 8此时,while外观会通过命令中断break

或者用户可以按Ctrl+C/kbd> 来终止 bash 脚本。

简洁的线条:

[[ ${#StringVar} -ge 1 ]] && [[ ${#StringVar} -le 8 ]] && break
echo "Sorry that string is ${#StringVar} long. Please try again."

... 可以像这样变得非常冗长:

if [[ ${#StringVar} -ge 1 ]] ; then
    if [[ ${#StringVar} -le 8 ]] ; then
        break
    else
        echo "Sorry that string is ${#StringVar} long. Please try again."
        continue
    fi
else
    echo "Sorry that string is ${#StringVar} long. Please try again."
    continue
fi

虽然这并不错误,但它浪费了程序员和系统的时间。

答案2

我假设您想反复要求用户输入,直到输入的长度小于 8 个字符。如果是这样,您可以使用while循环而不是if-else语句。这样,循环将无限次继续,直到输入的长度小于 8 个字符。只有当“输入”的长度小于 8 个字符时,脚本才会继续。代码将类似于:

#!/bin/bash
echo -n "Enter message with less than 8 characters: "
read detect
while [[ ${#detect} -gt 8 ]]
do
        echo -n "Length of the message was greater than 8. Try again...: "
        read detect
done
echo $detect 
#and the rest of the code continues

此外,如果您从根()文件夹运行脚本/,那么shebang#!bin/bash可能会起作用(您在原始帖子),但如果您从其他地方运行它,请包含解释器的绝对路径,即/bin/bash,因此将shebang修改为#!/bin/bash

相关内容