Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本检查用户输入是否与特定表单匹配_Bash_Shell_Ubuntu_If Statement - Fatal编程技术网

Bash脚本检查用户输入是否与特定表单匹配

Bash脚本检查用户输入是否与特定表单匹配,bash,shell,ubuntu,if-statement,Bash,Shell,Ubuntu,If Statement,下面您可以看到我的bash脚本 #createSession.sh echo "Welcome to ADS2 Session Start..." while [ true ] do echo "Starting service Daemon on the targert" echo "Enter the ip-address of the target" read x if [ -z "$x" ] then

下面您可以看到我的bash脚本

#createSession.sh

echo "Welcome to ADS2 Session Start..."

while [ true ]
do
echo "Starting service Daemon on the targert"
echo "Enter the ip-address of the target"
read x
if [ -z "$x" ]
then 
    echo "ip-address is empty"
else
    echo "Connecting with target..."
    if [[ $x =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]
    then
        ssh nvidia@"$x" "/opt/ads2/arm-linux64/bin/ads2 svcd&"
        echo "connection succeded"
        break
    else
        "Make sure the io address in the coorect form"  
    fi

fi
done
第一个问题

如您所见,脚本检查用户输入是否处理ip地址表单。但是,我希望脚本也接受ip地址作为字符串,其形式为
fdt-c-agx-4任意数字
。字符串的最后一部分可以是任意4个数字。因此,if语句如下

if[$x=~^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$].[x=#machtes fdt-c-agx-4任意数字]

第二个问题

ip地址可以以正确的形式输入,但不存在。因此,在本例中,ssh返回
ssh连接超时
。但是,将打印字符串
连接成功
,该字符串不正确。那么,我怎样才能使脚本足够聪明,从而意识到这种情况下的连接尚未建立

提前付款

我怎样才能使脚本足够聪明,从而意识到这种情况下的连接尚未建立

只需检查
ssh
退出状态

if ! ssh something@something something ; then
     echo "Och nuuu - problem with ssh" >&2
     exit 1
else
     echo "Yes! It worked! Good job!"
fi
因此,if语句如下

当然可以:

只是:

[
命令检查字符串
true
是否具有非零长度。因为它具有非零长度,所以它是成功的。您可以使用相同的结果编写
[任何内容]
。但只要
true
,它本身就是一个命令

我怎样才能使脚本足够聪明,从而意识到这种情况下的连接尚未建立

只需检查
ssh
退出状态

if ! ssh something@something something ; then
     echo "Och nuuu - problem with ssh" >&2
     exit 1
else
     echo "Yes! It worked! Good job!"
fi
因此,if语句如下

当然可以:

只是:


[
命令检查字符串
true
是否具有非零长度。因为它具有非零长度,所以它是成功的。您可以使用相同的结果编写
[任何东西]
。但是只要
true
,它本身就是一个命令。

因此,if语句类似于
Soo…这样编写吗?您有
^[0-9]+\[0-9]+\[0-9]+\。[0-9]+\.[0-9]+$
作为示例,只需编写与另一个匹配的代码即可。那么您认为
[0-9]
意思是?我推荐在网上可以找到的正则表达式纵横字谜,以便立即学习正则表达式。@KamilCuk你写吧。0到9之间的数字
结果,if语句就像是这样写的
Soo…那样写吧?你有
^[0-9]+\[0-9]+\[0-9]+\[0-9]+\[0-9]+$
作为一个例子,所以只需编写与另一个匹配的代码即可。那么您认为
[0-9]
means?我建议立即在网上使用正则表达式纵横字谜来学习正则表达式。@KamilCuk,谢谢你的来信。0到9之间的数字感谢你的详细回答。但是,OR运算符似乎不起作用。我独立地尝试了每种情况,它都能起作用。但是,使用OR更有效。我是否错误地使用了OR运算符?以及在侦听ssh时,当ip地址正确时,它会再次请求密码,就像再次调用连接解决了或操作员的问题一样。但是,关于侦听ssh退出状态的if语句会提示用户再次输入密码关于侦听ssh退出状态的if语句会提示用户再次输入密码so?这很好-在连接到远程服务器之前,您应该进行身份验证。如果您不想提供密码,请研究公钥身份验证,即
ssh copy id
。如果您想缓存您的凭据,请研究ssh代理,可能还有ssh的
ControlMaster
选项。没错。However它在检查ip地址后已经询问并远程执行命令。为什么在我观察ssh退出时它会再次询问?。感谢您的详细回答。但是,OR运算符似乎不起作用。我独立尝试了每个条件,它都起作用。但是,使用OR更有效。我是否错误地使用了OR运算符?以及f或者侦听ssh,当ip地址正确时,它会再次请求密码,就像它再次调用连接解决了或操作员的问题一样。但是,关于侦听ssh退出状态的if语句会提示用户再次输入密码o再次输入密码so?这很好-在连接到远程服务器之前,您应该进行身份验证。如果您不想提供密码,请研究公钥身份验证,即
ssh copy id
。如果您希望缓存凭据,请研究ssh代理,也许还可以研究ssh的
ControlMaster
选项。没错。但是,它在检查ip地址后已发出询问,并远程执行该命令。当我观察到ssh退出时,它为什么会再次发出询问?。
while [ true ]
while true