Linux shell脚本总结

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;

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值