标签:三次 size 自定义函数 对象 meta attr ali 界面 case
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解析器
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 [ 条件判断式 ];
then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
基本语法:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1) case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2) 双分号“;;”表示命令序列结束,相当于java中的break。
(3) 最后的“*)”表示默认模式,相当于java中的default。
基本语法:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
for 变量 in 值1 值2 值3…
do
程序
done
基本语法:
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 [选项参数] filename
说明:默认分隔符是制表符
选项参数说明
选项参数 功能
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列
-c 指定具体的字符
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处
理的行存储在临时缓冲
区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处
理完成后,把缓冲区
的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末
尾。文件内容并没有
改变,除非你使用重定向存储输出。
基本用法:
sed [选项参数] ‘command’ filename
选项参数说明
选项参数 功能
-e 直接在指令列模式上进行sed的动作编辑(一次执行多个操作时)。
-i 直接编辑文件
命令功能描述
命令 功能描述
a 新增,a的后面可以接字串,在下一行出现
d 删除
s 查找并替换
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的
部分再进行分析处理。
基本用法
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
标签:三次 size 自定义函数 对象 meta attr ali 界面 case
原文地址:https://www.cnblogs.com/x10011314xxx/p/12318379.html