linux把命令写到脚本当中,linux shell 脚本,将变量拼接到命令中。

文章目录

linux拼接字符串

命令行里拼接字符串

我碰到的问题

单引号的一些注意的地方

有这个一个场景:需要写多个定时任务提交到yarn,这些任务都是同一时间启动的。原先的做法是,所有的启动命令都使用linux的crontab,但是因为任务过多,所以crontab里的内容越来越多,不好管理,改时间也不方便,所以这里写脚本进行管理。

同时为了方便查看任务,每个任务的名字,将当前时间的时分拼接到yarn的任务的name上。

linux拼接字符串

这个就涉及到了linux获取当前时间和拼接字符串的问题了。本人不是主攻这个方向,所以就是边百度边写,获取时间:

time1=$(date "+%Y_%m_%d-%H_%M")

echo $time1

linux拼接字符串的规则:

#!/bin/bash

name="Shell"

url="http://c.biancheng.net/shell/"

str1=$name$url #中间不能有空格

str2="$name $url" #如果被双引号包围,那么中间可以有空格

str3=$name": "$url #中间可以出现别的字符串

str4="$name: $url" #这样写也可以

str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号

echo $str1

echo $str2

echo $str3

echo $str4

echo $str5

运行结果:

Shellhttp://c.biancheng.net/shell/

Shell http://c.biancheng.net/shell/

Shell: http://c.biancheng.net/shell/

Shell: http://c.biancheng.net/shell/

ShellScript: http://c.biancheng.net/shell/index.html

对于第 7 行代码,$name 和 $url 之间之所以不能出现空格,是因为当字符串不被任何一种引号包围时,遇到空格就认为字符串结束了,空格后边的内容会作为其他变量或者命令解析。

命令行里拼接字符串

获取到date了,拼接进命令行就行。

这里先举个其他例子:

name="abc"

touch /home/$name

这样等同于 touch /home/abc。

如果涉及到拼接的字符串前后都还有内容:

name="abc"

touch /home/${name}123

这样等同于 touch /home/abc123。

我碰到的问题

按理说万事俱备,只欠东风。我将命令写成了:

time1=$(date "+%Y_%m_%d-%H_%M")

... "name":"abc${time1}" ...

但是执行以后去yarn的ui去看,任务名字不是我想像的前缀加时间,而是abc${time1},非常郁闷,想不通,开始找哪里出问题了。

最后发现,问题出在了引号上。

name那条语句,是被单引号括起来的,shell脚本中,在单引号里,变量是不被替换的,问题出在这里了。那么如何解决呢?

time1=$(date "+%Y_%m_%d-%H_%M")

' ... "name":"abc'${time1}'" ...'

把变量排除在单引号之外即可。

单引号的一些注意的地方

在单引号中的任何字符都会原样输出,单引号字符串中的变量是无效的。

#!/bin/bash

name="abc"

echo '123 $name'

echo '在单引号中使用\"$name\"也是没有用的哦'

输出:

123 $name

在单引号中使用\"$name\"也是没有用的哦

顺便说一下,shell脚本中字符串可以使用双引号、单引号、不使用引号来定义。在不使用引号的情况下字符串中间不可以有空格。

#!/bin/bash

a="aaa";

b='bbb';

c=ccc

echo $a

echo $b

echo $c

执行脚本输出:

aaa

bbb

ccc

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值