执行

bash -n xx.sh用于检测脚本语法是否有错误
bash -x xx.sh用于追踪执行

${var}

用于限定变量名称的范围,并且支持通配符

$(cmd)

shell会先执行括号的cmd,然后将结果作为变量进行替换,替换只能替换标准输出,错误输出不能替换。

一串命令的()和{}

  • ()是重新开一个子shell然后执行,而{}则是在当前shell里执行。
  • ()最后一个命令可以不用分号,{}最后一个命令要用分号。
  • ()里第一个命令和左边括号不必有空格,而{}第一个命令和左括号之间必须有一个空格。
  • (){}里的某个命令的重定向只影响该命令, 而括号外的重定向则影响到括号里的所有命令。
root@guo:~/initramfs# var=test
root@guo:~/initramfs# echo var
var
root@guo:~/initramfs# echo $var
test
root@guo:~/initramfs# (var=notest;echo $var)
notest
root@guo:~/initramfs# {var=notest;echo $var}
{var=notest: command not found
test}
root@guo:~/initramfs# {var=notest;echo $var;}
-su: syntax error near unexpected token `}'
root@guo:~/initramfs# { var=notest;echo $var;}
notest
root@guo:~/initramfs# echo $var
notest

从上线可以看出,{}修改了变量的值。表明在当前shell中运行的。

root@guo:~/initramfs# var=test
root@guo:~/initramfs# echo $var
test
root@guo:~/initramfs# (var=notest;echo $var)
notest
root@guo:~/initramfs# echo $var
test

从上面可以看出()里的执行完毕后没有改变变量的值,说明在子shell中执行的。

特殊替换

${var:-string} 和 ${var:=string}

当变量var为空或未定义时,则在命令行中用string替换:${var:-string}
若var不为空时,则用变量var的值,而不进行替换。

root@guo:~/initramfs/bin# echo $aroot@guo:~/initramfs/bin# echo ${a:-bcc}
bcc
root@guo:~/initramfs/bin# echo $aroot@guo:~/initramfs/bin# a=test
root@guo:~/initramfs/bin# echo ${a:-bcc}
test
root@guo:~/initramfs/bin# unset a
root@guo:~/initramfs/bin# echo $aroot@guo:~/initramfs/bin# echo ${a:=bcc}
bcc
root@guo:~/initramfs/bin# echo $a
bcc

${var:=string}则是当变量var为空时,则将string赋值给var。

${var:+string}

当var不为空时才替换成string,若var为空,则不替换或替换成var的值,即空

root@guo:~/initramfs/bin# a=test
root@guo:~/initramfs/bin# echo $a
test
root@guo:~/initramfs/bin# echo ${a:+bcd}
bcd
root@guo:~/initramfs/bin# echo $a
test
root@guo:~/initramfs/bin# unset a
root@guo:~/initramfs/bin# echo $aroot@guo:~/initramfs/bin# echo ${a:+bcd}

${var:?string}

当var不为空时,则用var的值来替换,而当var为空时,则把string输出到STDERR中,并退出脚本。一般用此来检测是否设置了变量的值

root@guo:~/initramfs/bin# echo $aroot@guo:~/initramfs/bin# echo ${a:?bcd}
-su: a: bcd
root@guo:~/initramfs/bin# a=test
root@guo:~/initramfs/bin# echo ${a:?bcd}
test

$((exp))

符合C语言的运算符都在里面进行计算。包括三目运算符,不支持浮点型和字符串,只支持整型计算

root@guo:~/initramfs/bin# echo $(3+2)
3+2: command not foundroot@guo:~/initramfs/bin# echo $((3+2))
5

模式替换

${var%pattern},${var%%pattern} 从右边开始匹配
${var#pattern},${var##pattern} 从左边开始匹配
${var%pattern} ,${var#pattern} 表示最短匹配,匹配到就停止,非贪婪
${var%%pattern},${var##pattern} 是最长匹配

只有在pattern中使用了通配符才能有最长最短的匹配,否则没有最 长最短匹配之分
结构中的pattern支持通配符
* 表示零个或多个任意字符
?表示零个或一个任意字符
[...]表示匹配中括号里面的字符
[!...]表示不匹配中括号里面的字符

root@guo:~/initramfs/bin# f=a.tar.gz
root@guo:~/initramfs/bin# echo ${f#*.}
tar.gz  *匹配的a
root@guo:~/initramfs/bin# echo ${f##*.}
gz   最长匹配,匹配到了后面的.
root@guo:~/initramfs/bin# echo ${f%.*}
a.tar
root@guo:~/initramfs/bin# echo ${f%%.*}
a

==和=

== 可用于判断变量是否相等,=除了可用于判断变量是否相等外,还可以表示赋值
(( ))= 表示赋值, == 表示判断(整数比较),它们不等价

root@guo:~/initramfs/bin# ((n=5))
root@guo:~/initramfs/bin# echo $n
5
root@guo:~/initramfs/bin# ((n==5)) && echo "equal"
equal

shell | {}和()相关推荐

  1. jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理

    准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一.编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下 ...

  2. Linux shell 学习笔记(16)— shell 入门总结

    1. Shell 变量 Shell 变量包括自定义变量和环境变量: 自定义变量:脚本中自己命名定义的变量,通常为局部变量,其他 Shell 程序不能访问到: 环境变量,操作系统已定义的变量,如 PAT ...

  3. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  4. Linux shell 学习笔记(12)— linux 信号、后台运行脚本、作业控制、定时运行任务

    1. 处理信号 1.1 Linux 信号 常见的 Linux 信号如下表所示: 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL ...

  5. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  6. Linux shell 学习笔记(10)— 处理用户输入(命令行读取参数、读取用户输入、超时处理)

    1. 命令行参数 向 shell 脚本传递数据的最基本方法是使用命令行参数.命令行参数允许在运行脚本时向命令行添加数据. $ ./addem 10 30 本例向脚本 addem 传递了两个命令行参数( ...

  7. Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符

    1. for 语句 bash shell 中 for 命令的基本格式如以下,$var 变量包含着这次迭代对应的当前列表项中的值. for var in list docommands done 也可以 ...

  8. Linux shell 学习笔记(8)— 使用结构化命令(if-then 语句、数值比较、字符串比较、文件比较、case 语句)

    1. 使用 if-then 语句 最基本的结构化命令就是if-then语句.if-then语句有如下格式. if command then ​ commands fi 或者 if command; t ...

  9. Linux shell 学习笔记(7)— 构建基本脚本(变量、重定向、管道、状态码)

    1. 使用多个命令 如果要两个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开. $ date ; who Mon Feb 21 15:36:09 EST 2014 Christine tty2 ...

  10. Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)

    1. Linux的安全性 Linux 安全系统的核心是用户账户.每个能进入 Linux 系统的用户都会被分配唯一的用户账户.用户对系统中各种对象的访问权限取决于他们登录系统时用的账户. 用户权限是通过 ...

最新文章

  1. SSRS Report Knowledge Base
  2. Oracle--序列和触发器的使用
  3. axios的get与post
  4. 华为鸿蒙内置,内置鸿蒙系统,华为生态产品海雀智能摄像头Pro体验
  5. hsv 明度的范围_通过HSV转换的方式实现图片数据增强
  6. L1,L2,L3三级缓存
  7. “小朋友”们节日快乐呀~
  8. php-cgi并发,对于php-fpm和cgi,还有并发响应的理解
  9. wxPython中文教程 简单入门加实例
  10. 只要你上网,哪能不中毒?
  11. 实例浅析javascript call by value与call by reference
  12. Linux系统基础开发应用及Linux-C用户手册
  13. 卡密激活php代码,全自动PHP授权检测系统,卡密功能自助授权功能源码
  14. androidStudio 中使用矢量图
  15. Python摄氏度和华氏度的转换
  16. 深度学习服务器?深度了解一下!
  17. 计算机网络类别(按照作用范围分类)
  18. “死亡之星”——“阿波非斯”
  19. C语言拯救者(程序的预处理、编译、链接与宏- -15)
  20. 用Python进行多元线性回归分析(附代码)

热门文章

  1. 项目模板下载推荐网站
  2. 多伦多大学统计学转计算机科学,盘点!世界TOP30大学对A-Level、IBDP成绩的详细要求!...
  3. bcd 初始化库系统卷失败_U盘多系统启动制作教程 教你做多U盘系统启动盘
  4. 2022-2028全球与中国X射线平板探测器市场现状及未来发展趋势
  5. 易语言WEB开发教程7 模块化开发-扩展支持库中的类
  6. 远创机器人_雅马哈锁螺丝机器人,打标机器人
  7. html5 setdata函数,微信小程序this.setData is not a function错误解决
  8. 原生js写仿微信语音发送
  9. 微服务 OLTP 分布式数据库架构演进
  10. Required Long parameter is not present,SpringMVC的参数传递问题