shell 使用摘记

1.一直有点搞不清shell里面的判断,反引号,echo。看下面例子,

文件sedTest.yml内容:

server:
    url: http://testjkweb.tourongjia.com
spring:
  aop:
ddsdsd
      auto: true
      proxy-target-class: false
  redis:

代码:

match_flag=echo `grep -q "^spring" "/home/vobile/test/sedTest.yml"`

echo `$match_flag|wc -l`

if `grep -q "^spring" "/home/vobile/test/sedTest.yml"`; then
        echo "matching"
fi


if $match_flag; then
        echo "match"
else
        echo "not match"
fi

if [ `grep -q "^spring" "/home/vobile/test/sedTest.yml"` ]; then

        echo "matched 1"
fi


if [ $match_flag ]; then

        echo "matched 2"
fi

结果:

1
matching

match
matched 2

可以看到,if `grep -q "^spring" "/home/vobile/test/sedTest.yml"` 和if $match_flag的结果相同,都能匹配

而 if [ `grep -q "^spring" "/home/vobile/test/sedTest.yml"` ] 和 if [ $match_flag ] 的结果不同, if [ `grep -q "^spring" "/home/vobile/test/sedTest.yml"` ]不能匹配,??

 

3.if [ ! `grep "^$key" "$CONFIG_FILE_PATH/$path"` ];

这种代码要小心,如果`grep "^$key" "$CONFIG_FILE_PATH/$path"`返回字符串中有空格则会得到不匹配的结果,正确的做法

      t=`grep "^$key" "$CONFIG_FILE_PATH/$CONFIG_FILE"`
                echo $t"aaa"
                if [ ! "$t" ]; then
                        echo  "$CONFIG_FILE_PATH/$CONFIG_FILE不完整,$key项缺失"
                        exit 2
                fi

就是字符串要用“”括起来

 

 4. /tmp/$$中字符串是david.test = ${david.test}

for key in $(awk -F "=" '{print $2}' /tmp/$$) ; do
                echo "key=$key"

结果:${david.test}key,前面空格被忽略了
但换另外一种写法

 change_value=`echo $line | awk -F= '{gsub(/^( |\t)*|( |\t)*$/,"",$2);print $2}'`
  echo "change_value=$change_value"

结果:change_value= ${david.test},表明空格不被省略,看起来是反引号和$符在具体的应用中有所区别

转载于:https://www.cnblogs.com/zjhgx/p/7833526.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值