shell 脚本概括 实例
一、shell概述
1、什么是shell
shell命令解释器
界面输入命令,将命令翻译0101,让内核看得懂,内核将0101翻译成abcd命令结果。
windows也有shell 桌面也就是 以上同理,专业叫图形界面
shell分类:
Bash 可移至行好 编辑性好 快捷键好
二、shell脚本的执行方式
1、echo命令
选项:
-e 支持反斜线控制的字符转换
-n 不换行 echo -n '11111'
-e支持的控制字符:
\a 输出警告音
\n 换行符
\t 制表符,也就是tab键
[root@localhost ~]# echo -e \x61 #16进制 输出a
2、shell脚本的执行方法:
vim hello.s
#!/bin/bash
#the first program
# author:lihong (E-mail: [email protected])
echo -e lihong zhen shuai
shell脚本
注释
# 开头的就是注释 #!/bin/bash
变量
运行shell时候,会同时勋在三种变量
局部变量:局部变量在脚本或命令定义,仅在当前shell实例中有效
echo $HOME 家目录
echo $PWD 当前目录
echo $shell 默认解释器
echo $USER 当前用户
定义变量:
[root@localhost ~]# a=1 =前后没有空格
[root@localhost ~]# echo $a
1
撤销变量:
echo $a
字母数字下换线 不能数字开头 等号两边不能有空格
在bash中 变量默认都是字符串类型 无法直接进行数值运算
变量值有空格 需要使用双引号或者单引号括起来
提升全局变量:
[root@localhost ~]# a=1
[root@localhost ~]# export a
[root@localhost ~]# vim hello.sh
[root@localhost ~]# bash hello.sh
lihong zhen shuai
1
========================================
read读取控制台
read (选项) (参数)
-p:指定读取时的提示符
-t:输入时候的指定时间
参数:
变量:指定读取值的变量名
案例:
提示7秒内,读取控制台输入的名称
vim read.sh
#!/bin/bash
read -t 7 -p 请在7秒内输入您的姓名: name
echo $name
==============================================
函数
系统函数
1.basename基本语法:
basename [string / pathname] [suffix] (功能描述:bashename 命令会删除所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来
案例:
截取该******路径下的文件名称
(1) basename /root/22.4.4.txt
结果显示:22.4.4.txt
(2) basename /root/22.4.4.txt .txt
结果显示:22.4.4
2.dirname基本语法
dirname 解释:返回路径
dirname /root/22.4.4.txt
结果返回:/root/
自定义函数:
1.节本语法
[function] funname[()]
{
Action;
[return int;]
}
funname
touch sum.sh
vim sum.sh
#!/bin/bash
定义函数 定义名称()
{
求和内容;
}
read 输入相加的数字
调用函数
#!/bin/bash
functon sum()
{
s=0;
s=$[$1+$2]
echo $s
}
read -p 请输入第一个参数: p1
read -p 请输入第二个参数: P2
sum $p1 $p2
==============================
shell工具(重点)
cut的功能就是剪 截取自己想要的文件
基本语法:
cut [选项参数] filename
选项参数:
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列
案例:
数据准备
vim cut.txt
lihong
baoll
li hong
ma wen hua
ha ha
1.切割所有数据的第一列
cut -d 空格 -f 1 cut.txt
2.切割所有数据的第列和第三列
cut -d -f 2,3 cut.txt
3.cut.txt文件中切割出ma
cat cut.txt | grep ma | cut -d -f 1
4.选取系统PATH变量值,第二个: 开始的所有路径
echo $PATH
echo $PATH | cut -d : -f 3- #(3-:表示第三个往后,包括第三个)
============================
sed
基本用法:
sed [选项参数] 'command' filename
选项参数说明:
-e 有多个命令执行的加上 -e
命令功能描述:
a 新增
d 删除
s 查找并替换
案例:
数据准备
vim sed.txt
lihong
baoll
li hong
ma wen hua
ha ha
1)
将meinv 加入sed.txt第二行下打印
sed 2a meinv sed.txt
2)
删除sed.txt文件所有包含li的行
sed /li/d sed.txt
3)
将sed文件中li 替换成 666
sed s/li/666/g sed.txt
4)将第二行删除并将第二行li换成b
[root@localhost ~]# sed -e 2d -e s/li/b/g sed.txt
awk
基本语法:
awk 正则条件 执行内容
选项参数:
-F 指定输入文件拆分隔符
-v 复制一个用户定义变量
案例:
数据准备:
cp /etc/passwd ./
1)
搜索passwd文件 以root关键字开头的所有行,并射出该行第7列
awk -F : '/^root/ {print $7}' passwd
2)
搜索passwd文件以root关键字开头的所有行,并且输出该行的第1列和第7列,中间以,分割
[root@localhost ~]# awk -F : '/^root/ {print $1 , $7}' passwd
root,/bin/bash
3)
打印passwd第一列和第3列以','分割,开头添加li 最后一行添加hong
awk -F : 'BEGIN{print li} {print$1,$3} END{print hong}' passwd
awk -F : 'BEGIN{print li} END{print hong} {print$1,$3}' passwd
4)
将passwd文件中的用户id增加数值1并输出
awk -F : -v i=1 '{print $3+i}' passwd
5)
awk的内置变量
变量说明
FILENAME (filename) 文件名
NR(nr) 已读的记录数
NF(nf) 浏览记录的域的个数(切割后,列的个数)
awk -F : '{print FILENAME , NR , NF}' passwd
passwd,1,7 (文件名,行数+1+1+1+1,共计列数)
passwd,2,7
passwd,3,7
passwd,4,7
passwd,5,7
passwd,6,7
......
......
......
6)截取ip
[root@localhost ~]# ip a | grep eno16777736 | cut -d : -f 2 | grep inet | awk -F '{print $2}'
192.168.1.20/24
7)打印sed.txt空行的行号
awk '/^$/ {print NR}' sed.txt
5