shell脚本中如何在字符串中传递变量

文章目录

    • 摘要: 如何 在shell 脚本 中 传递解析变量的值.
    • 一种情况 字符串 本身 用单引号.
    • 一种情况 字符串 本身 用双引号
    • 举个应用场景的例子
    • 总结

摘要: 如何 在shell 脚本 中 传递解析变量的值.

分享一个shell 中的一个小技巧, 动态改变字符串中的一些值, 通过变量的方式 传入进去 .

举个例子: 我希望 一个字符串可以解析一个变量 的值. 比如 num=10

num=10 
string='I am ${num}' 

echo $string   # I am 10 

一种情况 字符串 本身 用单引号.

shell 中 如何 在 单引号的字符串中传递变量

# test1.sh
#!/bin/bash

num=100
echo "num:${num}"
sentence='hello ,I am frank.${num}'

echo "${sentence}"

结果如下:

$ sh test1.sh

num:100

hello ,I am frank.${num}

期望 打印 num 为100 , 但是 却打印了原生的字符串, 如果 希望 把num 的值 解析到字符串里面. 可以在 ${num} 添加单引号 ,注意这里 是单引号.

# cat  test.sh

num=100
echo "num:${num}"


sentence='hello ,I am frank.'${num}''

echo "sentence:${sentence}"

结果如下:

$ sh test1.sh

num:100

sentence:hello ,I am frank.100

注意 以上 sentence 变量 是 单引号的字符串, 所以要想 把变量传入到单引号的字符串 里面, 可以 使用 ‘’ 将变量括起来 就可以传递进来.

一种情况 字符串 本身 用双引号

#!/bin/bash

num=100
echo "num:${num}"


sentence="hello ,I am frank.${num}"

echo "sentence:${sentence}"

$ sh test.sh

num:100

sentence:hello ,I am frank.100

这种 是可以正常解析的. 如果 你想 让其显示 是 ‘100’ 这样的 话, 可以直接 在变量的时候 加上单引号,

#!/bin/bash

num=100
echo "num:${num}"


sentence="hello ,I am frank.'${num}'"

echo "sentence:${sentence}"

结果 如下:

$ sh test.sh

num:100

sentence:hello ,I am frank.‘100’

举个应用场景的例子

比如 用 curl 发起一个 post 请求. 需要 在body 里面传入一些值, 这些值 我想通过 变量的形式传入进去

在 body 里面 有一个参数 是 手机号, 我想通过我生成一个变量传入到 body 中 来改变 手机号的值 .

curl 中 参数 -d, --data DATA HTTP POST 数据

-d, --data
(HTTP) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. This will cause curl to
pass the data to the server using the content-type application/x-www-form-urlencoded.

(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像用户填写HTML表单并按下提交按钮时浏览器一样。 这将导致curl 使用content-type application / x-www-form-urlencoded将数据传递到服务器。

来看一下 下面的脚本

#!/bin/bash
# test_request.sh

for i  in `seq 10 200 `;do
        num=$(( $i %  100 ))
        curl -X POST \
          http://aaaa.bbbbbbb.cn/data_service/element \
           -H 'Content-Type: application/json' \
           -d '{
           
                "context": {
                        "id_card_number": "1312341234123412",
                        "mobile": "123278605'${num}'",
                        "name": "张三四",
                        "age":18,
                        "decision_time": "2018-10-26 10:33:09"
                },
                "element_id": "Frank_Test_Model_Prob"
                      
        }'

done

这里就需要 用 ‘’ 把 ${num} 括起来,这样才能识别num, -d 才能够 识别这个参数.

总结

在shell 脚本中 单引号和双引号 是有点区别的. 如果 要在字符串中传递 shell变量, 对于单引号的 的字符串 想要传递变量需要加上单引号. 而双引号不用,直接引用变量 即可解析变量.
在 python 中, 单引号几乎等于双引号的,在shell 编程中这一点却不一样.

分享快乐,留住感动. '2019-08-25 19:05:58' --frank

你可能感兴趣的:(linux运维笔记,shell编程,字符串传递变量)