shell总结
shell总结
一.学习心得
在学习本阶段shell这一课程时,我对shell有了一个大概的了解。
shell是一门解释性语言,shell语言与高级语言处理的对象不同;它与系统
有着密切的关系,易编写、调试、灵活性较强,但速度低。
既然是心得,那我在这里想说一些心里话。这是我来景航的第n个月
在这n个月中一路磕磕绊绊还是走了过来,不过让我最伤的是我竟然仅仅
在Java web第二阶段就摔了两次在分班考试前我揪心的很,俗话说一个
人不能在同一个地方摔倒三次这也是我心中所担心的。哈哈废话不多说我
还记得我在之前也打听过大数据阶段超级难学,当我真正开始接触Linux的
时候我感觉没什么,但是自从开始学习shell的时候发现并不是那么容易。
我呀不爱说话学习方面一般不敢和别人主动去沟通,哪怕是不会也不愿意
去问老师同学有时候想问却不敢因为我怕别人笑话我。说实话我感觉整体
学习效果并不是太好!能力有待提升。
二.介绍shell
在计算机科学中,shell俗称壳(用来区别于核),是指"为使用者提
供操作界面"的软件(命令解析器)。简单说就是指shell是一个命令解析
器。同时它又是一种程序设计语言。
三.shell的使用场景
1.作为监控脚本,采集系统或者业务指标,将数据发送到监控服务
器,如网络指标,业务 QPS
2.数据备份,如MySQL数据定时备份
3.定时任务,如凌晨1点数据同步
4.批处理,如同时更改所有服务器密码
5.服务部署,如自动部署MySQL,nginx环境
6.基础环境设置,如服务器刚上架时,根据一定规则设置网络,防火
墙,主机名等
7.服务管理,服务的启动,停止,进程检测
四.分别介绍所学的每一块儿内容
1.shell解析器
- 如何查看解析器(命令): cat /etc/shells
- 解析器:
- /bin/sh: 是bash的一个快捷方式;
- /bin/bash: bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能;
- /sbin/nologin: 表示非交互,不能登录操作系统;
- /bin/dash: 小巧,高效,功能相比少一些;
- /bin/tcsh: 具有c语言风格的一种shell,具有许多特性,但是也有一些缺陷;
- /bin/csh: 是csh的增强版本,完全兼容csh;
- bash和sh的关系:
- 命令:ll | grep bash
- sh最终指向的是bash,可见两者关系为软连接;
- Centos默认的解析器是bash
- 命令:echo $SHELL
2.变量
1.变量即在程序运行过程中它的值是允许改变的量
2.变量是用一串固定的字符来表示标示不固定的值的一种方
法
3.变量是一种使用方便的占位符,用于引用计算机内存的地
址,该地址可以存储Script运行时可更改的程序信息
4.在shell中变量是不能保存在系统中的,必须在文件中声明
在shell脚本中变量的种类
(1)在shell中变量分为环境级变量,用户级变量,系统级变
量
(2)环境级变量只在当前shell中生效,shell关闭丢失
(3)用户级变量写在用户的骨文件中,只针对当前用户生效
(4)系统级变量被写在系统的配置文件/etc/profile或
者/etc/profile.d/中,对于所有用户都生效
系统变量:
$HOME、$PWD、$SHELL、$USER
自定义变量:
1.基本语法:
(1)定义变量:变量名=变量值
(2)撤销变量:unset变量名
(3)声明静态变量:readonly 变量,注意:不能unset
2.变量定义规则:
(1)变量名称可以由字母、数字和下划线组成,但
是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法
直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号
括起来。
特殊变量:
$n: n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以
上的参数需要用大括号包含,如${10}
$#: 功能描述:获取所有输入参数个数,常用于循环
$*: 功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
: 功能描述:这个变量也代表命令行中所有的参数,不过把每个参数区分对待
$?: 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令
正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个
命令执行不正确了。
3.数组
基本语法:
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
方式2: arr=(value1 value2 value3) (这种方式带值)
4.运算符
基本语法:
(1)“$((运算式))”或“$[运算式]” + , - , *, /, % 加,减,乘,除,取余
(2)expr + , - , \*, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
5.条件判断
基本语法:
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ jinghang ]返回true,[] 返回false。
常用判断条件:
(1)两个整数之间比较
= 字符串比较 -lt 小于(less than)
-le 小于等于(less equal)-eq 等于(equal)
-gt 大于(greater than)-ge 大于等于(greater equal)
-ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
6.流程控制
if 判断:
基本语法:
if [ 条件判断式 ];
then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
case 语句:
基本语法:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1) case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2) 双分号“;;”表示命令序列结束,相当于java中的break。
(3) 最后的“*)”表示默认模式,相当于java中的default。
for 循环
基本语法:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
for 变量 in 值1 值2 值3…
do
程序
done
while 循环:
基本语法:
while [ 条件判断式 ]
do
程序
done
7.read
基本语法:
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数:
变量:指定读取值的变量名
8.函数
系统函数
basename基本语法:
basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的
前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
dirname基本语法
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件
名(非目录的部分),然后返回剩下的路径(目录的部分))
自定义函数
基本语法:
[ function ] funname[()]
{
Action;
[return int;]
}
funname
经验技巧:
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样
先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最
后一条命令运行结果,作为返回值。return后跟数值n(0-255)
9.shell工具
cut
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一
行剪切字节、字符和字段并将这些字节、字符和字段输出。
基本用法:
cut [选项参数] filename
说明:默认分隔符是制表符
选项参数说明
选项参数 功能
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列
-c 指定具体的字符
sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处
理的行存储在临时缓冲
区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处
理完成后,把缓冲区
的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末
尾。文件内容并没有
改变,除非你使用重定向存储输出。
基本用法:
sed [选项参数] ‘command’ filename
选项参数说明
选项参数 功能
-e 直接在指令列模式上进行sed的动作编辑(一次执行多个操作时)。
-i 直接编辑文件
命令功能描述
命令 功能描述
a 新增,a的后面可以接字串,在下一行出现
d 删除
s 查找并替换
awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的
部分再进行分析处理。
基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数说明
选项参数 功能
-F 指定输入文件折分隔符
-v 赋值一个用户定义变量
awk的内置变量
变量 说明
FILENAME 文件名
NR 已读的记录数
NF 浏览记录的域的个数
sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结
果标准输出。
基本语法:
sort(选项)(参数)
选项 说明
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列
参数:指定待排序的文件列表
五.罗列出你自己所练习的脚本
1.
#!/bin/bash
num=$(awk ‘BEGIN{sum=0}{sum+=1}END{print sum}‘ /root/class21/inittab.txt)
echo $num
if [ $num -gt 100 ]
then
echo "inittab is a big file."
else
echo "inittab is a small file."
fi
2.
#!/bin/bash
#NAME:test01.sh
#DESC:第一个脚本任务
#CREATETIME:2020-2-12 17:18
#CREATE:xzy
#PATH:/root/class22
echo "libai"
#echo "任务执行完毕 ~date "+%Y-%m-%d %H:%M:%S"~"
六.总结shell的面试题
1.每个脚本开始的 #!/bin/sh
或 #!/bin/bash
表示什么意思 ?
这一行说明要使用的 shell
。#!/bin/bash
表示脚本使用 /bin/bash
。对于 python 脚本,就是 #!/usr/bin/python
。
2.如何获取文本文件的第 10 行 ?
head -10 file|tail -1
3. 命令 “export”
有什么用 ?
使变量在子 shell
中可用。
4."chmod 500 script"
做什么 ?
使脚本所有者拥有可执行权限。
5.">"
做什么 ?
重定向输出流到文件或另一个流。
6.bash shell
脚本中哪个符号用于注释 ?
#
7.如何使用 awk
列出 UID 小于 100 的用户 ?
awk -F: ‘$3<100‘ /etc/passwd
8.[ $a == $b ]
和 [ $a -eq $b ]
有什么区别
[ $a == $b ]
- 用于字符串比较[ $a -eq $b ]
- 用于数字比较
9.写出 shell 脚本中所有循环语法 ?
for 循环 :
for i in $(ls);do
echo item:$i
done
while 循环 :
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done