日期:2014-05-16  浏览次数:20778 次

bash字符串变量命令中取值问题
我想定义一个java运行参数, 按条件能够设置,类似

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

/usr/java $para


结果运行说不认识para, 这个字符串变量应该如何定义和取值呢?

------解决方案--------------------
#!/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


------解决方案--------------------

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> 


可以直接赋值,=前后不能有空格
------解决方案--------------------
bash有自己特有的语法
你不能按照自己的想象去写代码
推荐阅读教程《Advanced Bash-Scripting Guide》
------解决方案--------------------
相对应的你没有if语句的结束语fi,不知道这个算不算是个问题?!
------解决方案--------------------
引用:
我想定义一个java运行参数, 按条件能够设置,类似

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

/usr/java $para


结果运行说不认识para, 这个字符串变量应该如何定义和取值呢?


错误1:if判断中a前没$,表示一个常量
错误2:使用=,前后要有空格
------解决方案--------------------
引用:
错误1:if判断中a前没$,表示一个常量
错误2:使用=,前后要有空格
 使用=,前后不能有空格,空格默认会被处理为分隔符,分隔符后的变量值会当做命令处理的,如不是命令,则会报command not found错误的

------解决方案--------------------
引用:
Quote: 引用:

错误1:if判断中a前没$,表示一个常量
错误2:使用=,前后要有空格
 使用=,前后不能有空格,空格默认会被处理为分隔符,分隔符后的变量值会当做命令处理的,如不是命令,则会报command not found错误的


不好意思,我说的有歧义,我说的“=前后要有空格”指的是if中的=,if中的=作为比较运算符,前后必须要有等号,不然就是恒为真的条件,例如 
test 1=2;echo $?
 。

test返回的状态码:
     0 if the expression is true,
     1 if the expression is false,
     2 if an error occurred.