shell编程(二)

常见的命令详解:

1.grep 命令详解

定义:grep命令是我们常用的一个强大的文本搜索命令

格式:grep [参数] [关键字] <文件名>

参数: -c: 输出匹配到的关键字的参数

-n: 显示匹配行和行号

-v: 显示不包含匹配文件的所有内容

-i:不区分大小写

精确定位错误代码:grep -nr [错误关键字] *

2. sed 命令详解

定义:sed命令是行文件编辑工具。因为它编辑文件是以行为单位的。

格式:sed [参数] '<匹配条件> [动作]' [文件名]

参数: 1.参数为空:不对文件进行编辑

2.参数为 -i :表示对文件进行编辑

动作详解:

-a 在匹配到的内容下一行增加内容

-i 在匹配到的内容上一行增加内容

-d 删除匹配到的内容

-s 替换匹配到的内容

替换:

命令格式: sed -i [替换格式] [文件名]

注意:替换命令的写法:'s###'  --->  's#原内容##' ---> 's#原内容#替换后内容#'

增加:

2.1.在指定行号的下一行增加内容

下一行增加:sed -i '行号a增加的内容' 文件名

增加多行:sed -i '1,3a增加内容' 文件名

2.2.在指定行号的当前行增加内容

指定一行增加:sed -i '行号i增加的内容' 文件名

指定多行增加: sed -i '1,3a增加内容' 文件名

删除:

2.1.指定行号删除: sed -i '行号d' 文件名

2.2删除多行: sed -i '1,3d' 文件名

3.awak命令详解

定义:awk是一个功能非常强大的文档编辑工具,它不仅能以行为单位还能以列为单位处理文件。

格式:awk [参数] '[ 动作]' [文件名]

常见参数: -F 指定行的分隔符

常见动作: print 显示内容

$0 显示当前行所有内容

$n 显示当前行的第n列内容,如果存在多个$n,它们之间使用逗号(,)隔开

常见内置变量: FILENAME 当前输入文件的文件名,该变量是只读的

NR 指定显示行的行号

NF 输出 最后一列的内容

OFS 输出格式的列分隔符,缺省是空格

FS 输入文件的列分融符,缺省是连续的空格和Tab

4. find 命令详解

格式:find [路径] [参数] [关键字]

参数: -name 按照文件名查找文件。

-perm 按照文件权限来查找文件。

-user 按照文件属主来查找文件。

-group 按照文件所属的组来查找文件。

-type 查找某一类型的文件,(d--目录,f--普通文件)

流程控制:

单分支if语句

(单一条件,只有一个输出)

#!/bin/bash
# 单if语句的使用场景
if [ "$1" == "nan" ]
then
   echo "您的性别是 男"
fi

双分支if语句

(一个条件,两种结果)

#!/bin/bash
# 单if语句的使用场景
if [ "$1" == "nan" ]
then
   echo "您的性别是 男"
else
   echo "您的性别是 女"
fi

多分支if语句

(n个条件,n+1个结果)

#!/bin/bash
# 单if语句的使用场景
if [ "$1" == "nan" ]
then
   echo "您的性别是 男"
elif [ "$1" == "nv" ]
then
   echo "您的性别是 女"
else
   echo "您的性别,我不知道"
fi

case 选择语句

(在多if语句的基础上对脚本进行升级)

# cat case.sh
#!/bin/bash
# case语句使用场景
case "$1" in
"start")
echo "服务启动中..."
;;
"stop")
echo "服务关闭中..."
;;
"restart")
echo "服务重启中..."
;;
*)
echo "$0 脚本的使用方式: $0 [ start | stop | restart ]"
;;
esac

for 循环语句

(循环指定的所有元素,循环完毕之后就退出)

#!/bin/bash
# for语句的使用示例
for i in $(ls /root)
do
  echo "${i}"
done

while 循环语句

(只要条件满足,就一直循环下去)

#!/bin/bash
# while的示例
a=1
while [ "${a}" -lt 5 ]
do
   echo "${a}"
   a=$((a+1))-->相当于a+=1
done

until 循环语句:

(只要条件不满足,就一直循环下去)

#!/bin/bash
# until的示例
a=1
until [ "${a}" -eq 5 ]
do
   echo "${a}"
   a=$((a+1))
done

shell里边函数的基础知识

简单函数:

定义函数:

函数名(){

函数体

}

调用函数:

函数名

传参函数:

传参数:函数名 参数

函数体调用参数:

函数名( ){

函数体 $n

}

阶段综合案例

#!/bin/bash
# 定义本地变量
arg="$1" 
# 脚本帮助信息
usage(){
  echo "脚本 $0 的使用方式是: $0 [ start|stop|restart ]"
} 
# 函数主框架
if [ $# -eq 1 ]--->参数数量
then
  case "${arg}" in
    start)
      echo "服务启动中..."
    ;;
    stop)
      echo "服务关闭中..."
    ;;
    restart)
      echo "服务重启中..."
    ;;
    *)  -->其他情况
      usage
    ;;
  esac
else                   
  usage --->帮助信息
fi    
原文地址:https://www.cnblogs.com/mengxinfeng/p/12545547.html