shell基础 以及 sed、awk

1、沙棒#!

    

 

 

查看系统支持的shell:

    

 

 

2、变量引用

格式

$变量名

${变量名}

单反引号(`)

单反引号用来优先执行某系些行为,获取其结果

弱引用 vs 强引用

弱引用("")会识别字符串中的变量,将其替换,反之强引用认为单反是包含在''内的都为字符串,除非参数控制

 

 

 

 

3、条件判断

1、基本语法

if [ $1 -eq 1 ]

then

    echo "------"

fi

 

2、多层判断

if [ $1 -eq 1 ]

then

    echo "------"

else [ $1 -eq 2 ]

then

    echo "+++++++"

else

    echo "=========="

fi

 

3、正则匹配

a='123'

if [[ "$a" =~ "4" ]]

then

    echo "存在2"

else

    echo "不存在"

fi

 

4、for 循环

1、循环数组:

a=(1 2 3 4 5 6)

for i in ${a[*]}

do 

    echo "$i"

done

 

2、自定义数字列表

 

for i in `seq 10`

do 

    echo "$i"

done

 

case语法

count1=$1

case $count1 in

    1) echo "today is Monday";;

    2) echo "today is Tuesday";;

    3) echo "today is Wednesday";;

    4) echo "today is Thursday";;

    5) echo "today is Friday";;

    6) echo "today is Saturday";;

    7) echo "today is Sunday";;

    *) break;;

esac

 

位置参数

1、执行文件名后追加参数,根据空格分隔,脚本内部通过$1-$9回去对应位置的参数

 

 

2、位置参数超过10的时候,脚本内部获取参数要用{}括起来

 

 

5、函数

1、提前定义

2、function关键字存在的时候,函数名后的()可有可无,反之必须存在

3、语法结构:

function varname(){

代码块

}

函数传参:

1、同样支持位置变量,在函数内部通过 $1 $2....方式获取

2、函数内部无法通过${1..10}获取外部传入变量,必须通过自定义变量先获取到外部变量,然后在函数内部引用自定义计量的方式

 

 

6、删除

删除是shell脚本最危险的一种操作,删除资源的时候带上绝对路径/相对路径

1、严禁直接使用rm -rf *

 

 

2、尽量减少通配符的使用

7、嵌套python

b=123

python3 - <<EOF

print("https://www.baidu.com?a={}".format($1))

EOF

 

8、sed

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

参数:

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
#在file.log文件的第四行后添加一行,并将结果输出到标准输出

sed -e 4a\newLine file.log 

#多点编辑
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。

动作:

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
    nl /etc/passwd | sed '2a test 123' #第3行插入”test 123“

     

  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
    nl /etc/passwd | sed '2,5c test 123' #将第2-5行的内容取代成为test 123

     

  • d :删除,所以 d 后面通常不接任何东西
    nl /etc/passwd | sed '3,$d' #删除3到最后一行
    nl /etc/passwd | sed  '/root/d' #删除有root关键字的行

     

  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
    nl /etc/passwd | sed '2i test 123' #第2行插入”test 123“

     

  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
    nl /etc/passwd | sed '/root/p' #搜索 /etc/passwd中有root关键字的行

     

  • s :取代,可以直接进行取代的工作, s 的动作可以搭配正则,例如 1,20s/old/new/g 
    sed 's/正则字串/新的字串/g'

     

9、awk

AWK 是一种处理文本文件的工具,以下为常见的几种用法

# 每行按空格或TAB分割,输出文本中的1、4项
awk '{print $1,$4}' log.txt

# 使用","分割
awk -F, '{print $1,$2}'   log.txt

# 设置变量a=1awk -va=1 '{print $1,$1+a}' log.txt

# 过滤第一列大于2并且第二列等于'Are'的行 ($1表示第一列,可结合运算符使用)
awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt

 

posted @ 2021-06-02 21:43  Shadow.Yin  Views(94)  Comments(0Edit  收藏  举报