shell脚本中linux命令的特殊用法记录

shell脚本中linux命令的特殊用法记录

  • 1、linux命令特殊参数选项
    • 1.1、sed -e
    • 1.2、echo -e
  • 2、 shell 扩展
    • 2.1、[[ ]]支持用=~进行正则匹配
    • 2.2、$1 ${1} 的区别
  • 3、特殊命令用法
    • 3.1、{} 变量替换
    • 3.2、sed 替换

1、linux命令特殊参数选项

1.1、sed -e

sed -e

以严格模式执行脚本,在sed -e 后面的所有命令,只要遇到命令执行失败的,直接退出shell脚本。

1.2、echo -e

-e:激活转义字符。

shell脚本中linux命令的特殊用法记录_第1张图片

使用-e选项时,若字符串中出现以下特殊字符,则进行转义,做特别处理,而不会将它当成一般文本输出到屏幕。

  1. \n 换行且光标移至行首
echo -e "\na=5 \nb=6 \nc=7" >> echo-e\n.test

vi打开 可以看到空格也会写入到文件中

shell脚本中linux命令的特殊用法记录_第2张图片
shell脚本中linux命令的特殊用法记录_第3张图片shell脚本中linux命令的特殊用法记录_第4张图片shell脚本中linux命令的特殊用法记录_第5张图片

2、 shell 扩展

2.1、[[ ]]支持用=~进行正则匹配

这个语法符号的 左边是具体字符串,右边是正则表达式。
[[ A =~ B ]] 判断变量A的值是否包含变量B

[[ "a b c" =~ "b" ]]

这个意思是判断 变量"a b c"是否包"b" ,显然是包含的。

参考链接: https://unix.stackexchange.com/questions/340440/bash-test-what-does-do

注意,左边的字符串应该用引号括起来,而右边的正则表达式不应该用引号括起来(除非你想匹配字面的字符串)。

shell脚本中linux命令的特殊用法记录_第6张图片

2.2、$1 ${1} 的区别

$1 ${1} 是等效的,没有区别,指的都是取第一个命令行参数。
$1 和 ${1} 是完全等价的。花括号只是为了消除歧义,而且往往是多余的。

参考链接: https://stackoverflow.com/questions/5163144/what-are-the-special-dollar-sign-shell-variables

shell脚本中linux命令的特殊用法记录_第7张图片

3、特殊命令用法

3.1、{} 变量替换

attribute=(${NAME//-/ })

{}花括号进行变量替换,最长替换,把-替换为空格" "。因为数组是空格分割的。
()圆括号进行初始化数组。

3.2、sed 替换

sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

这个语句的作用是在/etc/yum.repos.d/docker-ce.repo文件中,替换https://download.docker.com为https://mirrors.tuna.tsinghua.edu.cn/docker-ce

sed -i 替换字符串时
可以灵活替换分隔符,来实现特殊用法。
这个例子中,按照常用分隔符/ 来写的话 是这样

sed -i 's/https://download.docker.com/https://mirrors.tuna.tsinghua.edu.cn/docker-ce/' /etc/yum.repos.d/docker-ce.repo

这样有个问题,就是需要把把原字符串中的/前面添加\,进行转义。因为此时替换分隔符是/,和原字符串中的/在含义上有混淆,所以需要转义。
正确写法是

sed -i 's/https:\/\/download.docker.com/https:\/\/mirrors.tuna.tsinghua.edu.cn\/docker-ce/' /etc/yum.repos.d/docker-ce.repo

这样会显得麻烦
所以可以可以灵活替换分隔符,来实现特殊用法。此时原字符串中有/,那么就不用/作为替换分隔符,改正为用+作为替换分隔符。此时+d作为替换分隔符,原字符串中的特殊字符为/,因此不会混淆。

你可能感兴趣的:(linux,shell,linux,bash,shell)