shell脚本使用笔记
本文最后更新于:2022年4月22日 早上
shell脚本使用笔记
文章仍在施工中。。。
1.基础知识
- 第一行使用
#!/bin/bash
来指定使用的shell。如果写的那个shell不存在那么默认不会执行。外部指定shell可以覆盖脚本内部指定的 - 变量使用
$variable
来保存,弱类型,默认都是字符串,赋值时等号不要写空格 - 父子shell的变量不共用
- 环境变量在当前shell以及任意子shell中可以使用
!!
为上一条指令- 单引号不能识别特殊语法。需要变量替换要使用双引号
- 使用
bash
会开启一个子shell,使用source
不会开启新shell - 反引号括起来的执行结果会被保存下来,其效果相当于
a=$(ls)
nohup XXX & 1>/dev/null
后台执行命令
2.变量
- 用户个人环境变量配置文件
~/.bash_profile
,远程登录用户特有~/.bashrc
。全局配置文件/etc/profile
、/etc/bashrc
。系统建议最好创建在/etc/profile.d
而不是直接修改全局配置。全局配置影响所有登录用户,个人配置优先生效 - set/declare,输出所有变量,包括全局、局部
- env,只显示全局变量
- export,显示和设置环境变量值
- 设置变量前加
readonly
,那么shell结束前此变量值不可更改 export |awk -F '[ :=]' '{print $3}'
打印环境变量的命令(第三列)- 变量加载顺序:
/etc/profile
,/etc/profile.d
,$HOME/.bash_profile
,$HOME/.bashrc
,/etc/bashrc
特殊参数
$0
,获取shell脚本文件名,以及脚本路径$n
,获取shell脚本的第n个参数,n在1~9之间,大于9则需要写${10}
,参数空格隔开$#
,获取执行的she11脚本后面的参数总个数$*
,获取shell脚本所有参数,不加引号等同于$@
作用,加上引号作用是接收所有参数为单个字符串$@
,不加引号效果同上;加引号,是接收所有参数为独立字符串
1 |
|
- 特殊状态
$?
,上一次命令执行状态返回值,正确,非0失败$$
,当前shell脚本的进程号$!
,上一次后台进程的PID$_
,获取上次执行命令最后一个参数
1 |
|
3.shell子串
3.1.bash基础内置命令
echo
-n
,不换行输出-e
,解析字符串中的转义符
eval
,执行多个命令exec
,不创建子进程,执行后续命令。执行完毕后自动exit
3.2.子串
${a}
,变量值$ #a}
,变量字符串长度扩号应该有左半边。别问我为啥没打~问就是mathjax渲染不出来
${a:start}
,变量start数值位置以及之后的字符(索引从0开始)${a:start:length}
,变量start数值之后的length长度字符${a#word}
,从变量开头,删除最短匹配的word子串${a##word}
,从变量开头,删除最长匹配的word${a%word}
,从变量结尾删除最短的word${a%%word}
,从变量结尾开始删除最长匹配的word${a/pattern/string}
,用string代替第一个匹配的pattern${a//pattern/string}
,用string代替所有的pattern
本博客所有文章除特别声明外均为原创,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!