为了账号安全,请及时绑定邮箱和手机立即绑定

if else 语句嵌套使用报错万分感谢

if else 语句嵌套使用报错万分感谢

森栏 2019-10-16 10:22:47
用shell脚本执行了如下语句:#!/bin/bashread-p"pleaseinputyourname:"-t10nameread-p"pleaseinputyournumber:"-t10numberread-p"pleaseinlutyourpasswd:"-t10passwdif[!-z"$name"-a!-z"$number"-a!-z"$passwd"]theny=$(echo$number|sed's/[0-9]//g')if[-z"$y"]thenfor((i=1;i/dev/nullecho$passwd|/usr/bin/passwd--stdin$name$1&>/dev/nulldoneelseecho"Error!"exit2fielseecho"Error!!"exit1fi想实现的效果:第一个ifelse语句;如果$name$number$passwd中有一个为空,则提示:Error!并退出;如果都不为空则执行y=$(echo$number|sed's/[0-9]//g')。第二个ifelse语句:如果$y为空,则执行:for循环语句;如果不为空则提示:Error!并退出。但是输入$name$number$passwd为空之后,报错了,信息如下:root@ubuntu:/home/baochunfen#bashfor04.shpleaseinputyourname:pleaseinputyournumber:pleaseinlutyourpasswd:for04.sh:line10:((:i
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

if[!-z"$name"-a!-z"$number"-a!-z"$passwd"]
加上空格。
bash是依靠空格分隔的。[是bash的一个内置命令,其中的所有操作符和操作数都必须的这个命令的独立的参数。
没有空格,[这又一个参数。这要这个参数不空,返回就是真。在你这里这个参数一定不空。
bash
testexpr[expr]Returnastatusof0or1dependingontheevaluationoftheconditionalexpressionexpr.Eachoperatorandoperandmustbeaseparateargument.ExpressionsarecomposedoftheprimariesdescribedaboveunderCONDITIONALEXPRESSIONS.testdoesnotacceptanyoptions,nordoesitacceptandignoreanargumentof--assignifyingtheendofoptions.......[当为该命令提供了]1argumentTheexpressionistrueifandonlyiftheargumentisnotnull.
                            
查看完整回答
反对 回复 2019-10-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

5.0.2测试没问题
bash版本多少?
z"$name"-a!-z"$number"-a!-z"$passwd
你是不是这么写的?如果是的,那就这个错了,注意分割符号if[!-z"$name"-a!-z"$number"-a!-z"$passwd"]
我一直以为是粘贴错误(¨̮)
                            
查看完整回答
反对 回复 2019-10-16
  • 2 回答
  • 0 关注
  • 394 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信