用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的一个内置命令,其中的所有操作符和操作数都必须的这个命令的独立的参数。没有空格,[这又一个参数。这要这个参数不空,返回就是真。在你这里这个参数一定不空。bashtestexpr[expr]Returnastatusof0or1dependingontheevaluationoftheconditionalexpressionexpr.Eachoperatorandoperandmustbeaseparateargument.ExpressionsarecomposedoftheprimariesdescribedaboveunderCONDITIONALEXPRESSIONS.testdoesnotacceptanyoptions,nordoesitacceptandignoreanargumentof--assignifyingtheendofoptions.......[当为该命令提供了]1argumentTheexpressionistrueifandonlyiftheargumentisnotnull.
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
5.0.2测试没问题bash版本多少?z"$name"-a!-z"$number"-a!-z"$passwd你是不是这么写的?如果是的,那就这个错了,注意分割符号if[!-z"$name"-a!-z"$number"-a!-z"$passwd"]我一直以为是粘贴错误(¨̮)
添加回答
举报
0/150
提交
取消