系统相关
首页 > 系统相关> > shell 脚本概括 实例

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: 1308714598@qq.com)

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

 

 

 

 

 

 


 

标签:shell,实例,概括,echo,cut,sed,print,root
来源: https://www.cnblogs.com/honglili/p/16253924.html