1.变量
环境变量 :env查看
自定义变量 :只要被执行了,都是全局的,局部可以通过local声明
特殊变量:
- $0:也就是脚本文件名
- $1,$2...$9:1-9个命令行参数
- $#:命令行参数的个数
- $@或 $*:也就是"$1,$2...$9"
- $?:前一个命令的返回结果,默认0正常非0异常
- $$:当前进程的ID号
2.数学/时间/字符串
数学-浮点:echo “1.1+2.2”|bc
数学-整数(空格):expr 1 + 1
计数world count: stdin | wc -l
时间:date +'%Y-%m-%d %H:%M:%S'
字符串(长度,正则,截取,位置等) expr length xxxx
3.数组 https://blog.51cto.com/whnba/1891360,其它特殊形式如{1..00} ,命令的标准输出如
for content in `cat /etc/passwd | cut -d ":" -f 1`
do
echo $content
done
4. 信号捕获
程序正常终止:方法结束和调用exit等;异常终止:abort或接收信号(ctrl+c(2号信号);kill -9;
kill默认15号信息等,开机启动的1号进程systemd无法终止; trap "COMAND" 2;trap "" 2 捕获到Ctrl+c不执行任何命令相当于屏蔽2号信号,,只能kill。
5.脚本启动方式
. test.sh sh test.sh bash test.sh ./test.sh source test.sh 等多种启动,有些无需执行权限,有些命令解释器不同,
参考https://blog.csdn.net/leochen_career/article/details/78604509
6.sed(stream editor)和AWK
行处理,如grep都接受管道标准输入或文件,一般套路:sed进行curd后管道输入给AWK进行格式化输出。
sed
一条较复杂的修改替换:sed '10,/^{/s/INFO/ERROR/g;20,30s/DEBUG/XXX/g' test1.log test2.log >1.text
先第10行到匹配到{开头的行的INFO替换为ERROR,再将第20行到30行的DEBUG替换为XXX, s/INFO/ERROR/g,看作类似p,d操作的整体命令,g表示全局,2g表示每行前两个匹配项。
- sed语法格式: sed 'patten1,pattern2command' xx.log
- sed常用参数:-n(静默模式,不输入当前处理行) -r(支持扩展正则,类似egrep) -i修改源文件
- 匹配模式:pattern1,pattern2支持行数或正则
- command:p打印,d输出,a匹配行后追加,i行前追加, w输出到文件,r读取外部文件内容到匹配行
- 多行模式空间:https://blog.csdn.net/imzoer/article/details/8740673
AWK
例1:awk 'BEGIN{FS=":";}{print $1} ' /etc/passwd
例2:cat /etc/passwd |awk 'BEGIN{FS=":";ORS="||";}$1 ~/^root/{if($1!=1)printf "%-20s xxx %-20s\n" ,$1,$7} '
- awk语法格式:awk 'BEGIN{}pattern{script}END{}' xx.conf
- awk内置变量: https://www.cnblogs.com/chengmo/archive/2010/10/06/1844818.html
- 其它参数:-f script较长时引入外部.awk文件,-v shell变量传入AWK,注意变量有空格如2019-11-11 11:11:11,需要“$var”避免替换后报错,单引号不能正确替换$变量,
- pattern支持正则及逻辑运算符
- awk数组与shell区别(部分):如shell下标0开始,unset array[1]数组元素下标不会变,AWK下标可以是字符串
其它:
函数返回方式:return 只能返回1-255整数,一般0表示返回成功1失败;echo 一般返回字符串
sh -x(显示shell执行过程) restart.sh vehicle-manager.jar
#!/bin/bash
# 函数参数与脚本位置参数区别
function getName(){
echo "$1$2";
}
echo "$1$2";
getName $2 $1;