如何多次使用一个验证功能“bash centos”

我只想多次使用一个验证函数。 我试图在下面做一个验证函数。 我如何修复我的代码并多次使用这种验证功能?

#!/bin/bash
digit='^[[:digit:]]+$';
function numberValidate {
    if [[ $1 =~ $digit ]];
       then
          echo "$1 is number. Correct";
       else
          echo “Enter only numbers”;
          numberValidate
    fi
}
printf “Enter the number 1 ”; read n1;
numberValidate $n1
printf “Enter the  number 2”; read n2;
numberValidate $n2

谢谢。


循环执行时不要使用递归:

inputNumber () {
    local digit='^[[:digit:]]+$'
    read $n
    until [[ ${!n} =~ $digit ]]; do
        echo "Enter only numbers"
        read $n
    done
}
printf "Enter the number 1 "; inputNumber n1
printf "Enter the number 2 "; inputNumber n2

前面的内容将所有输入移动到验证函数中,并利用了默认情况下函数中设置的变量全局为全局的事实。 inputNumber的参数是要设置的变量的名称。


inputNumber () {
    local digit='^[[:digit:]]+$'
    outputvar=$1
    shift
    if [[ $# = 0 ]]; then
       read -p "Please enter a number for ${outputvar} "
    else
       read -p "$* " n
    fi
    until [[ "${n}" =~ $digit ]]; do
        read -p "Enter only numbers " n
    done
    printf -v "${outputvar}" '%s' "$n"
}

inputNumber n1 "Enter the number 1"
inputNumber n2 "Enter the number 2"
inputNumber n3
echo "n1=${n1} n2=${n2} n3=${n3}"

评论中的问题:如何重用这些内容? 当你喜欢这样的功能时,你可以将它们收集到文件中,并将它们放在专用目录中。 也许选择$ {HOME} / shlib作为一个文件夹并创建iofunctions,datefunctions,dbfunctions和webfunctions(或io.sh,date.sh,db.sh和web.sh)等文件。 接下来你可以用一个点source文件:

$ head -2 ${HOME}/shlib/iofunctions
# This file should be included with ". path/iofunctions"
function inputnumber {

$ cat ${HOME}/bin/roger.sh
#!/bin/bash
# Some settings
shlibpath=/home/roger/shlib
# Include utilities
. "${shlibpath}"/iofunctions
# Let's rock
inputNumber rockcount How many rocks
# call an imaginary function that only accepts y and n
inputyn letsdoit Are you sure

您可以将函数(或源代码函数文件)放在.profile / .bashrc中,但是当您想要在crontab中启动脚本时会出现问题(并且您将习惯这些函数并忘记inputNumber不是标准bash函数)。
另一个问题是如何引用另一个与脚本文件位于同一级别的目录(不是固定路径)。 使用路径(如bin/roger.sh )启动脚本时,包括../shlib/iofunctions将会失败。 有很多答案的好问题,我不知道哪个是最好的:
如何将当前工作目录设置为脚本的目录?
从内部获取Bash脚本的源目录
bash脚本获得完整路径的可靠方法?
如何将当前工作目录设置为脚本的目录?
如何在POSIX sh中获取脚本目录?

链接地址: http://www.djcxy.com/p/56783.html

上一篇: how to use one validation function many times "bash centos"

下一篇: Call one shell script from another script using relative paths