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