[Share Experiences] 找了很久的 while 无限循环终于解决了输入判断的问题
Tofloor
poster avatar
酷谷的谷子
deepin
2022-05-13 05:34
Author

在使用zenity 中 为了输入的要求 。一直没有办法(网上看不懂不会用),今天可以解决输入判断了

如果不使用 zenity 下载这个附件 循环判断入的字符1.zip

#!/bin/bash
#循环判断的脚本
#空格长度
FGF_D=`printf %-55.5s`
FGF_A=`printf %-37s`
FGF_B='====================================================='
while true ; do
    username=$(zenity --entry --width=520 --height=150 \
    --title="输入条件对话框" --text="只能输入大小写字母" --entry-text="$entry_text")

    if [ -z $username ];then
        zenity --error --width=380 --height=150 --title="输入错误" \
        --text "$FGF_B\n||$FGF_D输入不能为空$FGF_D||\n$FGF_B"
    elif [[ ! $username =~ ^[a-z\|A-Z]+$ ]];then
        zenity --error --width=380 --height=150 --title="输入错误" \
        --text "$FGF_B\n||$FGF_A输入的不是字母,请重新输入! $FGF_A||\n$FGF_B"
    else
        #当满足输入条件时,跳出所有循环
        break; 
   
    fi
done
FGF_E=`printf %-30s`
zenity --error --width=380 --height=150 --title="验证成功" \
       --text "$FGF_B\n||$FGF_E$username$FGF_E||\n$FGF_B"

exit 0


Reply Favorite View the author
All Replies
lanxing0821
deepin
2022-05-15 23:29
#1

起码也要加个退出条件吧,试试这个

#!/bin/bash

shopt -s extglob

while : ; do
    echo
    read -p "input string: " var
    case $var in
        (+([a-zA-Z]))   echo 匹配成功! ;;
        (*)             echo 匹配失败! ;;&
        (:q|:Q)         echo 用户退出。;exit 0 ;;
    esac
done
Reply View the author
酷谷的谷子
deepin
2022-05-16 00:16
#2
lanxing0821

起码也要加个退出条件吧,试试这个

#!/bin/bash

shopt -s extglob

while : ; do
    echo
    read -p "input string: " var
    case $var in
        (+([a-zA-Z]))   echo 匹配成功! ;;
        (*)             echo 匹配失败! ;;&
        (:q|:Q)         echo 用户退出。;exit 0 ;;
    esac
done

这个写法我我百度了差不多的这个不知道怎么退出循环

我需要的是满足条件就退出循环 ,不过你这个比百度的更简洁

Reply View the author
lanxing0821
deepin
2022-05-16 02:40
#3
酷谷的谷子

这个写法我我百度了差不多的这个不知道怎么退出循环

我需要的是满足条件就退出循环 ,不过你这个比百度的更简洁

你这个需求似乎 until 语句更符合。也不用写什么无限循环。

#!/bin/bash
read -p "请输入纯英文字母字符: " var
until echo "$var" | grep -qE '^[a-zA-Z]+$' ; do
    read -p "匹配失败!请重新输入: " var
done
echo 匹配成功!
Reply View the author