bash字符串变量命令中取值问题

ladofwind 2013-12-12 10:50:24
我想定义一个java运行参数, 按条件能够设置,类似

if a=1;then
para = ""
else
para = "-Dlog.file=/file.log"

/usr/java $para


结果运行说不认识para, 这个字符串变量应该如何定义和取值呢?
...全文
163 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
蜗牛- 2013-12-16
引用 9 楼 shigang_xing 的回复:
[quote=引用 8 楼 magi1201 的回复:] [quote=引用 7 楼 shigang_xing 的回复:] 错误1:if判断中a前没$,表示一个常量 错误2:使用=,前后要有空格
使用=,前后不能有空格,空格默认会被处理为分隔符,分隔符后的变量值会当做命令处理的,如不是命令,则会报command not found错误的 [/quote] 不好意思,我说的有歧义,我说的“=前后要有空格”指的是if中的=,if中的=作为比较运算符,前后必须要有等号,不然就是恒为真的条件,例如
test 1=2;echo $?
。 test返回的状态码: 0 if the expression is true, 1 if the expression is false, 2 if an error occurred. 再解释下为什么要看test的状态码? if 后跟的就是test条件 见:http://ss64.com/bash/if.html test帮助手册: man test; 详细文档:info coreutils 'test invocation' 另外关于比较运算符= 可以看 man expr; 详细文档: info coreutils 'expr invocation' =有两个上下文,一个赋值,一个比较运算符,不同的上下文有区别,不要混淆了[/quote] 前段时间简单学习了下Shell,最近又做Java开发了, 共同学习
  • 打赏
  • 举报
回复
蜗牛- 2013-12-16
引用 11 楼 shigang_xing 的回复:
bash到java跨度不小
我本来就是做java的,对shell感兴趣,就学习了一段时间,偶尔兼职改个shell脚本
  • 打赏
  • 举报
回复
shigang_xing 2013-12-16
引用 10 楼 magi1201 的回复:
[quote=引用 9 楼 shigang_xing 的回复:] [quote=引用 8 楼 magi1201 的回复:] [quote=引用 7 楼 shigang_xing 的回复:] 错误1:if判断中a前没$,表示一个常量 错误2:使用=,前后要有空格
使用=,前后不能有空格,空格默认会被处理为分隔符,分隔符后的变量值会当做命令处理的,如不是命令,则会报command not found错误的 [/quote] 不好意思,我说的有歧义,我说的“=前后要有空格”指的是if中的=,if中的=作为比较运算符,前后必须要有等号,不然就是恒为真的条件,例如
test 1=2;echo $?
。 test返回的状态码: 0 if the expression is true, 1 if the expression is false, 2 if an error occurred. 再解释下为什么要看test的状态码? if 后跟的就是test条件 见:http://ss64.com/bash/if.html test帮助手册: man test; 详细文档:info coreutils 'test invocation' 另外关于比较运算符= 可以看 man expr; 详细文档: info coreutils 'expr invocation' =有两个上下文,一个赋值,一个比较运算符,不同的上下文有区别,不要混淆了[/quote] 前段时间简单学习了下Shell,最近又做Java开发了, 共同学习 [/quote] bash到java跨度不小
  • 打赏
  • 举报
回复
shigang_xing 2013-12-16
引用 8 楼 magi1201 的回复:
[quote=引用 7 楼 shigang_xing 的回复:] 错误1:if判断中a前没$,表示一个常量 错误2:使用=,前后要有空格
使用=,前后不能有空格,空格默认会被处理为分隔符,分隔符后的变量值会当做命令处理的,如不是命令,则会报command not found错误的 [/quote] 不好意思,我说的有歧义,我说的“=前后要有空格”指的是if中的=,if中的=作为比较运算符,前后必须要有等号,不然就是恒为真的条件,例如
test 1=2;echo $?
。 test返回的状态码: 0 if the expression is true, 1 if the expression is false, 2 if an error occurred. 再解释下为什么要看test的状态码? if 后跟的就是test条件 见:http://ss64.com/bash/if.html test帮助手册: man test; 详细文档:info coreutils 'test invocation' 另外关于比较运算符= 可以看 man expr; 详细文档: info coreutils 'expr invocation' =有两个上下文,一个赋值,一个比较运算符,不同的上下文有区别,不要混淆了
  • 打赏
  • 举报
回复
蜗牛- 2013-12-14
引用 7 楼 shigang_xing 的回复:
错误1:if判断中a前没$,表示一个常量 错误2:使用=,前后要有空格
使用=,前后不能有空格,空格默认会被处理为分隔符,分隔符后的变量值会当做命令处理的,如不是命令,则会报command not found错误的
  • 打赏
  • 举报
回复
shigang_xing 2013-12-14
引用 楼主 ladofwind 的回复:
我想定义一个java运行参数, 按条件能够设置,类似 if a=1;then para = "" else para = "-Dlog.file=/file.log" /usr/java $para 结果运行说不认识para, 这个字符串变量应该如何定义和取值呢?
错误1:if判断中a前没$,表示一个常量 错误2:使用=,前后要有空格
  • 打赏
  • 举报
回复
WO浣熊OW 2013-12-13
相对应的你没有if语句的结束语fi,不知道这个算不算是个问题?!
  • 打赏
  • 举报
回复
ljc007 2013-12-13
bash有自己特有的语法 你不能按照自己的想象去写代码 推荐阅读教程《Advanced Bash-Scripting Guide》
  • 打赏
  • 举报
回复
蜗牛- 2013-12-12

weblogic@z174774C6c16g120gs11-1:~/Oracle/Middleware/app_packages> cat test.sh

a=2
if [ $a -eq 2 ];then
    para="nihao"
else
    para="haha"
fi

echo $para 
weblogic@z174774C6c16g120gs11-1:~/Oracle/Middleware/app_packages> sh test.sh
nihao
weblogic@z174774C6c16g120gs11-1:~/Oracle/Middleware/app_packages> 
可以直接赋值,=前后不能有空格
  • 打赏
  • 举报
回复
ladofwind 2013-12-12
引用 2 楼 fengfengdiandia 的回复:
#!/bin/bash

a=2
para=

if [ $a == 1 ];then
	echo para = $para
else
	para=-Dlog.file=/file.log
	echo para = $para
fi

/usr/java $para
不能直接赋值吗?
  • 打赏
  • 举报
回复
疯疯癫癫 2013-12-12
#!/bin/bash

a=2
para=

if [ $a == 1 ];then
	echo para = $para
else
	para=-Dlog.file=/file.log
	echo para = $para
fi

/usr/java $para
  • 打赏
  • 举报
回复
ladofwind 2013-12-12
没人回答吗?
  • 打赏
  • 举报
回复
相关推荐
发帖
系统维护与使用区
加入

1.9w+

社区成员

系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
申请成为版主
帖子事件
创建了帖子
2013-12-12 10:50
社区公告
暂无公告