[实习]一些关于shell的学习使用

本文章用于记录平时零零散散的学习,持续更新

1. 各种括号的含义

1.${var} 
2.$(cmd) 
3.()和{} 
4.${var:-string},${var:+string},${var:=string},${var:?string} 
5.$((exp)) 
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)
1.1 ${var}

首先花括号代表的是引用变量本身

先说最常见的变量形式都是$var,直接使用。如

$ var=test 
$ echo $var 
test

但如果要在变量值后加随意的字符(我这里用AA)时,就会出错,如下:

$ echo $varAA

$

所以这时候这时应该用变量的原形:${var}即是加一个大括号来限定变量名称的范围

$ echo ${var}AA 
testAA 
1.2 $(cmd)

注意括号括起来里面是个命令而不再是个变量了!如果错用花括号成为括号会出现指令找不到的错误

命令替换$(cmd)和符号`cmd (这还有一个但是我不知道怎么打打不出来) (注意这不是单引号,在美式键盘上,是ESC下面的那个键)有相同之处

$ ls 
a b c 
$ echo $(ls) 
a b c 
$ echo ls 
a b c

我们来分析一下命令echo $ (ls),以便理解所谓命令替换是什么意思:
shell扫描一遍命令行,发现了$ (cmd)结构,便将$ (cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令echo $ (ls)中的 $ (ls)位置,即替换了$ (ls),再执行echo命令。
如下:
echo $ (ls)被替换成了echo a b c
这里要注意的是$ (cmd)中的命令的错误输出是不会被替换的,替换的只是标准输出:

$ var=$(cat d) ###文件d在当前目录不存在 
cat: d: 没有那个文件或目录 
$ echo $var

$ ###显然var变量的值是空的

还是拿一个我的例子举例

suffix=$(md5sum file.txt|cut -d" " -f1|cut -c 1-6)_${CI_COMMIT_SHA:0:6}

这里前面是命令的输出,所以用括号,后面是字段的截取,用花括号

2. sed

sed参考文章 这篇写的很详细了,可以看看,排版也还ok,我比较中意csdn

说说自己遇到的重点,首先直接sed没有-i是不会强制写入文件,只会输出而已
其次说一个报错

报错:sed: -e expression #1, unknown option to `s'

解决方法: 报错是因为替换的字符串包含有分隔符/,拿我这边的例子是我的字符串形式是https://xxx.xxx.xxx,里面含有符号/所以这行改一下分隔符就可以解决问题了,改成感叹号!或者| 等其他来分割。

例子:使用感叹号
sed -i "s! $BASE_IMAGE! $BASE_IMAGE-$suffix! g" Dockerfile

3. cut

cut参考这篇,虽然比较简单

cut一般用于切割文本,文件,如果只想对一个字符串进行切割可以直接用切片来做。
这里我之前在写cicd文件的时候,那个镜像环境中没有git,但是我需要commit_id,查阅资料发现gitlab ci\cd自带一些配置变量,其中包含CI_COMMIT_SHA可以直接获取当前commit_id。于是我就用这个变量,然后我想切割获取前6个字符,那么代码如下

$ part=${CI_COMMIT_SHA:0:6}

形式是${var:s:num} var-被切割的变量名, s-开始的位置, num想要切割的数量

`

这里也罗列一下用git的方法:

  • 获取完整commit id(如:bb4f92a7d4cbafb67d259edea5a1fa2dd6b4cc7a)
    git rev-parse HEAD

  • 获取short commit id(如:bb4f92a)
    git rev-parse --short HEAD

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值