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 协议 ,转载请注明出处!