当前位置:网站首页>shell基础知识合集
shell基础知识合集
2022-08-08 11:55:00 【仟各】
1.shell概述
shell是一个命令行解释器,它接收应用程序以及用户的命令,然后调用操作系统内核。所以外层应用程序是通过操作shell来操作内核,从而控制硬件,达到外层应用操作底层硬件的目的。
2.shell解释器
能解析shell脚本的解释器一共有六种,常用的是sh和bash。系统默认解释器是bash。
3.shell脚本入门
3.1脚本格式
以 #!/bin/bash 开头(指定解释器)
3.2案例
(1)案例一:创建一个shell脚本,输出helloworld
注:
执行脚本可以用下面几种方式:
方式一:借助解释器来执行脚本文件
sh helloworld.sh
bash helloorld.sh
方式二:修改脚本文件的权限,改为可执行权限,然后执行./helloworld.sh
(2)案例二:执行脚本文件,从而能够在指定目录下创建一个文本文件,并且文本文件中需要插入一行字符串。
创建脚本文件并打开:
输入内容:
执行查看:
4、shell中的变量
4.1系统变量
$HOME:当前用户家目录
$PWD:表示当前目录
$SHELL:表示默认解释器
$USER:当前用户
4.2自定义变量
(1)声明普通变量
直接写出”变量名=变量值“即可,需要注意的是等号两边不能有空格
(2)声明静态变量
声明:readonly 变量,注意声明静态变量之后不能用unset来撤销变量
(3)声明全局变量
“ export 变量名 ”将变量声明为全局有效
注:变量的定义规则
4.3特殊变量
(1)$n
功能描述:n为数字,$0代表脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
案例:
(2)$#
功能描述:获取所有输入参数个数,常用于循环
案例:
(3)$* [email protected]
$*功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
[email protected]功能描述:这个变量也代表命令行中所有的参数,不过[email protected]把每个参数区分对待
案例:
(4)$?
功能描述:最后一次执行的命令返回的状态。如果这个变量的值为0,证明上一个命令执行正确;如果这个变量的值为非0,则证明上一个命令执行错误。
案例:
上述输出0表示”bash parameter.sh ls wd“这个命令执行正确。
5.运算
5.1expr一步完成计算
案例1:
依据上述案例可知:expr后面的表达式中数字和运算符号之间必须要有空格。
案例1:
5.2采用$[运算式]方式
6.条件判断
6.1基本语法
[ condition ] (注意 condition 前后要有空格)
6.2常用判断条件
(1)两个整数之间比较、字符传比较
-lt 小于 (less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge大于等于(greater equal) -ne 不等于(not equal)
(2)按照文件权限进行判断
-r 有读的权限 -w 有写的权限 -x 有执行的权限
(3)按照文件类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在并且是一个目录
6.3案例
7.流程控制
7.1if 判断
(1)基本语法:
if [ 条件判断式 ]
then
程序
if
注意:
①【 条件判断式】,中括号和条件判断式之间必须有空格
②if 后要有空格
7.2case 语句
(1)基本语法
case $变量名 in
"值1")
如果变量的值等于1,则执行程序1
;;
"值2")
如果变量的值等于2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上值,则执行此程序
;;
esac
注意事项:
①case行尾必须为单词"in",没一个模式匹配必须以右括号”)“结束。
②双分号“;;”表示命令序列结束,相当于java中的break。
③最后的” * "表示默认模式,相当于java中的default。
(2)案例:
7.3for循环
(1)基本语法1
for ((初始值;循环控制条件;变量变化))
do
程序
done
(2)基本语法2
for 变量 in 值1 值2 值3……
do
程序
done
(3)案例1:
(4)案例2:
从上述案例可见$*与[email protected]的区别。
7.4while 循环
(1)基本语法
while [ 条件判断式 ]
do
程序
done
(2)案例
8.read读取控制台输入
8.1基本语法
read(选项)(参数)
选项:-p :指定读取值时的提示符
-t :指定读取值时等待的事件(秒)
参数:
变量:指定读取值的变量名
8.2案例
9.函数
9.1系统函数
(1)basename 基本语法
basename [string/pathname] [sufix]
功能描述:basename 命令会删掉所有的前缀包括最后一个(’/‘)字符,然后将字符串显示出来。
选项:suffix 为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
案例:
(2)dirname基本语法
dirname 文件绝对路径
功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录部分)。
案例:
9.2自定义函数
(1)基本语法
[function] funname[()]
{
Action;
[return int;]
}
funname
(2)经验技巧:
①必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。
②函数返回值只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果作为返回值。return 后跟数值n(0-255)
(3)案例
10.shell工具
10.1cut
cut的工作是“剪”,具体的说就是在文件中负责剪切数据。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符、字段输出。
(1)基本用法
sut [选项参数] filename
(2)选项参数说明
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列
(3)案例
案例一:
案例二:
案例三:在文件中切割出ASA
案例四:选取系统PATH变量值,第2个“:”开始后的所有路径
案例五:切割ifconfig后打印的IP地址
10.2sed
sed是一种流编辑器,它依次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件的内容并没有改变,除非你使用重定向存储输出。
(1)基本用法
sed [选项参数] ’command‘ filename
(2)参数说明
-e 直接在指令列模式上进行sed的动作编辑
(3)命令功能描述
a :新增,a的后面可以接字串,在下一行出现
d :删除
s:查找并替换
(4)案例:
案例一:将“BTB”这个单词插入到sed.txt第二行下,打印
案例二:删除sed.txt文件所有包含“ASA”的行
案例三:将sed.txt文件中“ASA”替换为BTB
’g‘表示global,全部替换
案例四:将sed.txt文件中的第二行删除并将"ASA"替换为“BTB”
10.3sort命令
sort(选项)(参数)
(1)选项:
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分割字符
-k 指定需要排序的列
(2)案例
10.4awk命令
写脚本必用命令——awk命令的讲解https://blog.csdn.net/m0_54355780/article/details/122479439
11.面试题
(1)使用Linux命令查询sed.txt中空行所在的行号
(2)在文件file.txt中使用linux命令计算第二列的和并输出
(3)shell脚本里面如何检查一个文件是否存在?如果不存在该如何处理?
(4)用shell写一个脚本,对文件中无序的一列数字排序
(5)用shell脚本写出查找当前文件夹下所有的文本文件中包含有字符”txt“的文件名称
边栏推荐
- Yizhou Financial Analysis | Internet-based small loan platform intensively increased capital; comprehensive evaluation index of bank wealth management subsidiaries released in the first half of the ye
- JSON的Unicode问题;自定义排序问题;保留最大子集问题
- node中package解析、npm 命令行npm详解,node中的common模块化,npm、nrm两种方式查看源和切换镜像
- Replication监控及自动故障切换
- Software testing testing on behalf of the user
- 部署spark2.2集群(standalone模式)
- DDoS攻击为什么是无解的
- 哪来的TB级推荐模型
- 安科瑞预付费水电集团物业解决方案-Susie 周
- ReentrantLock原理,ReentrantLock和synchronized区别
猜你喜欢
Redis的那些事:一文入门Redis的基础操作
爱可可AI前沿推介(8.8)
转转商品系统高并发实战(数据篇)
Jingdong, zhang, director of the cloud wireless products division treasure jingdong cloud wireless treasure close relationship with the open source | the great god, open source BUFF gain strategy revi
ReentrantLock原理,ReentrantLock和synchronized区别
【Force】Add two numbers
写个 shell 玩 数字炸弹
一起学习集合框架之 TreeSet
一条SQL在MySQL中是如何执行的
你的 golang 程序正在悄悄内存泄漏
随机推荐
转转商品系统高并发实战(数据篇)
【Force】Add two numbers
MySQL安装及使用
鲲鹏开发者创享日2022:鲲鹏全栈创新 与开发者共建数字湖南
学习与尝试 --> 事件风暴
3 million tenders!Qingdao Medical Security Bureau host database middleware operation and maintenance service project
JPA之使用复合主键
E121: Unable to open and write file solution when vim /etc/profile is written
宏任务和微任务——三目算符与加号优先级——原生的js如何禁用button——0xff ^ 33 的结果是——in的用法——正则匹配网址
模式识别 学习笔记:第八章 特征提取
.NET Community Toolkit 8.0.0 版本发布
神经网络分类
结合“xPlus”探讨软件架构的创新与变革
案例分析 | 宜家以双钻设计模型探索线上零售新业务
LeetCode_487_最大连续1的个数Ⅱ
四、哈希表
Combining "xPlus" to discuss the innovation and change of software architecture
dedecms支持Word图文自动粘贴
期货开户的交易通道和后续服务
测试开发专栏——序言:总结过去,展望未来