shell脚本中的函数
-
函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。 格式: function f_name() { command } 函数必须要放在最前面 示例1 #!/bin/bash input() { echo $1 $2 $# $0 } input 1 a b 示例2 #!/bin/bash sum() { s=$[$1+$2] echo $s } sum 1 2 示例3 #!/bin/bash ip() { ifconfig |grep -A1 "$1: " |tail -1 |awk '{print $2}' } read -p "Please input the eth name: " e myip=`ip $e` echo "$e address is $myip"
shell中的数组
-
定义数组 a=(1 2 3 4 5); echo ${a[@]} echo ${#a[@]} 获取数组的元素个数 echo ${a[2]} 读取第三个元素,数组从0开始 echo ${a[*]} 等同于 ${a[@]} 显示整个数组 数组赋值 a[1]=100; echo ${a[@]} a[5]=2; echo ${a[@]} 如果下标不存在则会自动添加一个元素 数组的删除 unset a; unset a[1] 数组分片 a=(`seq 1 5`) echo ${a[@]:0:3} 从第一个元素开始,截取3个 echo ${a[@]:1:4} 从第二个元素开始,截取4个 echo ${a[@]:0-3:2} 从倒数第3个元素开始,截取2个 数组替换 echo ${a[@]/3/100} a=(${a[@]/3/100})
正则三剑客(grep)
- 什么是正则
正则就是一串有规律的字符串 掌握好正则对于编写shell脚本有很大帮助 各种编程语言中都有正则,原理是一样的 本章将要学习grep/egrep、sed、awk
-
grep [-cinvABC] 'word' filename (gerp的功能就是查找的功能了) -c 打印行数 -i 不区分大小写 -n 显示行号 -v 打印不符合要求的行数,取反的意思 -r 遍历所有子目录 -A 后面跟数字,表示打印符合要求的行以及下面的n行,例如-A2就是下面的两行 -B 同上,过滤出符合要求的行以及上面n行 -C 同上,同时过滤出符合要求的行以及上下各n行 grep -n 'root' /etc/passwd grep -nv 'nologin' /etc/passwd grep '[0-9]'/etc/inittab grep -v '[0-9]'/etc/inittab grep -v '^#' /etc/inittab 除了以#开头的,都打印出来 grep -v '^#' /etc/inittab|grep -v '^$' (除了除了以#开头的跟空行,都打印出来)(^表示开头,$表示结尾,^$表示空行) grep '^[^a-zA-Z]' test.txt 打印以字符开头的,不论大小写 grep 'r.o' test.txt grep 'oo*' test.txt grep '.*' test.txt (.表示任意字符,*表示0个或者多个) grep 'o\{2\}' /etc/passwd egrep 'o{2}' /etc/passwd 打印含有2个o的行数 (egrep是扩展正则,| ? () {} 都是扩展正则,不能直接在grep上用,如果非要用grep的话需要用\脱义) egrep 'o+' /etc/passwd (+表示1个或者多个) egrep 'oo?' /etc/passwd (?表示0个或1个) egrep 'root|nologin' /etc/passwd egrep '(oo){2}' /etc/passwd