【shell教程】| 简介及基本使用案例

news2024/11/17 15:34:58

文章目录

  • 一、简介
  • 二、脚本
    • 1 格式
    • 2 执行方式
    • 3 变量
        • 自定义变量
        • 特殊变量
    • 4 运算符
    • 5 条件判断
    • 6 流程控制
      • 1 if判断
      • 2 case语句
      • 3 for循环
      • 4 while 循环
    • 七、read读取控制台输入
    • 八、函数
      • 1 basename
      • 2 dirname
      • 3 自定义函数
    • 九、正则表达式
    • 十、文本处理工具
      • 1 cut
      • 2 grep
      • 3 sed
      • 4 awk

一、简介

常见的shell
在这里插入图片描述

echo $SHELL	# 查看当前使用的shell

二、脚本

1 格式

  • 开头指定解析器;
#!/bin/bash	

2 执行方式

# 1
sh ./脚本名		# 使用sh,让解析器来执行脚本
# 2
chmod +x 脚本	# 修改脚本权限,让脚本有权限自己执行
./脚本			# 直接执行

3 变量

set:显示系统所有变量;
unset 变量名:撤销变量;
readonly 变量名:静态变量,只读不能修改,不能unset;
export 变量名:全局环境变量,可被其他shell使用;

自定义变量

变量名=变量值	# 格式,注意=不能有空格

变量定义规则

  • 可由字母、数字、下划线组成,不能数字开头;
  • 等号两侧不能有空格;
  • 默认为字符串类型,不能数值计算;
  • 若有空格,则需要使用'"

在这里插入图片描述

特殊变量

$n:n代表第几个参数,十个以上需要在数字加上{}
在这里插入图片描述
$#:获取输入参数的个数;
$*:获取行中所有的参数,为一个整体;
$@:获取行中所有的参数,每个都区分;
在这里插入图片描述
$?:返回最后一次执行命令的状态;若为0,则正确;
在这里插入图片描述

4 运算符

# 方式1
$((运算式)) 
# 方式2 
$[运算式]

在这里插入图片描述

5 条件判断

格式

# 方式1
test condition
# 方式2
[ condition ]	# 前后要有空格

在这里插入图片描述

整数比较条件

-eq		# equal 等于 
-ne		# not equal不等于
-lt		# less than 小于
-le		# less equal 小于等于
-gt		# greater than 大于
-ge		# greater equal 大于等于

字符串比较条件

=		# 等于
!=		# 不等于

按文件权限判断

-r		# 读权限
-w		# 写权限
-x		# 执行权限

文件类型

-e		# exist 文件存在
-f		# file 文件存在且为常规文件
-d		# dir 文件存在且为目录

在这里插入图片描述
多条件判断

&& 	# 与
||

6 流程控制

1 if判断

# 注意,if后需要有空格
# 单分支
if [ 判断 ]
then
	# ...
fi

# 多分支
if [ 判断 ]
then
	# ...
elif [ 判断 ]
then 
	# ...
else 
	# ...
fi 

2 case语句

case $变量名 in
"值1")
	# ...
;;
"值2")
	# ...
;;
*)	# 相当于default
	# ....
;;
esac

3 for循环

#方式1
for(( 初始值;循环控制条件;变量变化 ))
do
	# ...
done

# 方式2
for 变量 in 值1 值2 值3...
do 
	# ...
done

在这里插入图片描述

4 while 循环

while [ 判断 ]
do
	# ...
done

七、read读取控制台输入

格式

read 选项 参数
# 选项
-p	# 指定读取值时的提示符
-t	# 指定读取值时等待的时间

# 参数
变量	# 指定读取值的变量名
read -t 7 -p "Enter your name in 7 seconds :" NN
echo $NN

八、函数

1 basename

格式

basename [string / pathname] [suffix]	# 删掉所有的前缀包括最后一个/字符,再将字符串显示

在这里插入图片描述

2 dirname

格式

dirname 文件绝对路径	# 从给定的包含绝对路径的文件名中取去除文件名,返回剩下的路径

在这里插入图片描述

3 自定义函数

格式

[function] funname[()]
{
	Action;
	[return int;]
}
#[注意]:需要在调用前声明;函数返回值只能通过$?来获取

在这里插入图片描述

九、正则表达式

\w	# 等价于 [A-Za-z0-9_]
.	# 匹配除了\n\r之外
\s	# 任意的空白字符
\S	# 匹配任何非空白字符
^	# 在[]外表示开头,在[]内表示取反的意思
$	# 表示结尾
()	# 子表达式的开始和结束
*	# 匹配前表达式0或多次
+	# 匹配前表达式1或多次
?	# 非贪婪限定符,匹配前子表达式0或多次
{m,n}	# 匹配前表达式最少m次,最多n次
|	# 选择左或右边的选项	

# 贪婪和非贪婪
匹配最近的满足规则的	# 非贪婪
匹配范围最广的满足规则的	# 贪婪

案例

1 以S开头的字符串: ^S

2 以数字结尾的字符串: [0-9]$
    [0123456789]    # 匹配任意数字
    [0-9]			# 匹配任意数字
    \d				# 匹配任意数字

3 匹配空字符串(没有任何字符): ^$

4 字符串只包含三个数字: ^\d\d\d$ 或 ^\d{3}$
	{n} 花括号括起来一个数字,表示前面的单元重复n次

5 字符串只有3到5个字母: ^[a-zA-Z]{3,5}$
    {m,n} m表示前面单元最小重复次数,n表示最大重复次数
    [a-zA-Z]   表示大小写字母  如果中括号中有多个区间,区间之间不要留空格或其他分隔符

6 匹配不是a-z的任意字符: ^[^a-z]$
    [^a-z]    中括号中第一个字符如果是^,表示区间取反
    
7 字符串有0到1个数字或者字母或者下划线:  ^[0-9a-zA-Z_]?$ 或 ^\w?$
    {0,1} 表示重复0-1次
    ?     也可以表示0-1次重复

8 字符串有1个或多个空白符号(\t\n\r等): ^\s+$
    \s  表示空白字符 包括 \t\n\r ....
    {1,}   表示重复1-n  跟+号一样

9 字符串有0个或者若干个任意字符(除了\n)
    .  代表任意字符,除了\n
    ^.{,}$   花括号中两个参数置空表示重复次数任意 0-n
    ^.*$     *表示前面的单元重复0-n次

    ? 0-1
    + 1-n
    * 0-n


10 匹配0或任意多组ABC,比如ABC,ABCABCABC: ^(ABC)*$
    使用小括号来讲多个单元重新组合成为一个单元

11 字符串要么是ABC,要么是123: ^ABC$|^123$
    | 表示选择,选择两边的正则匹配一个

    ^(ABC|123)$     小括号也可以将选择范围控制在括号内

12 字符串只有一个点号: ^\.$
    做转义 还是使用\

13 匹配十进制3位整数: ^([0-9]|[1-9][0-9]{1,2})$          
    100 - 999
    ^[1-9][0-9]{2}$

    匹配十进制 0-999 的数字
        分段
            一位数
                [0-9]
            两位数
                10-99
                [1-9][0-9]
            三位数
                [1-9][0-9]{2}

14 匹配0-255的整数

    匹配 ip 
        分段
            一位数: [0-9]
            两位数: 10-99 => [1-9][0-9]
            三位数: 100-199 => 1[0-9]{2}
            		 200-249 => 2[0-4][0-9]
            		 250-255 => 25[0-5]

15 匹配端口号: 0-65535

16 email:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

十、文本处理工具

1 cut

cut [选项] filename

-f	# 列号,提取第几列
-d	# 分隔符,默认`\t`
-c	# 按字符进行切割,后加n表示取第几列

在这里插入图片描述

2 grep

-c 	# 只输出匹配行的计数
-i 	# 不区分大小写
-H 	# 文件名显示
-r 	# 递归遍历目录
-n 	# 显示行号
-s 	# 不显示不存在或无匹配文本的错误信息
-v 	# 显示不包含匹配文本的所有行,这个参数经常用于过滤不想显示的行
-E 	# 使用扩展的正则表达
-P 	# 使用perl的正则表达式
-F 	# 匹配固定的字符串,而非正则表达式


egrep  = grep -E
fgrep  = grep -F
rgrep  = grep -r

3 sed

文本1 ->  sed + 脚本 -> 文本2 

ed 编辑器   ->  sed   -> vim 

sed option 'script' file1 file2 ...             # sed 参数  ‘脚本(/pattern/action)’ 待处理文件
sed option -f scriptfile file1 file2 ...        # sed 参数 –f ‘脚本文件’ 待处理文件

p,  print           # 打印
a,  append          # 追加
i,  insert          # 插入
d,  delete          # 删除
s,  substitution    # 替换

4 awk

awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ...

最常见用法就是过滤哪一列
xxxx | awk '{print $2}'

参数
-F	# 指定输入文件分隔符
-v	# 赋值一个用户定义变量

脚本格式:
{actions}  # 每一行文本都无条件的执行脚本
/pattern/{actions} # 匹配了模式之后再执行后面的动作
condition{actions}
    BEGIN
        # 在遍历文本的第一行之前会执行某个动作
    END
        # 在遍历完文本之后再去执行某个动作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线支付系列【1】支付演变史

有道无术,术尚可求,有术无道,止于术。 文章目录支付货币发展史物物交换实物货币纸质货币电子货币数字货币支付模式演变一方支付(现金当面支付)二方支付(商家银行)第三方支付(商家、银…

【GD32F427开发板试用】工业级串口OTA实现----移植韦东山老师BootLoader项目

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:足球之路 一、综述 一款完善的工业产品往往需要支持在线更新程序的需求,业界最近火热的叫法叫做“OTA”。这篇文章记录我利用技术…

2001-2020年中国区域创新能力总、分指标效用值

中国区域创新能力总、分指标效用值2001-2020 1、时间:2001-2020年 2、范围:全国31个省份 3、来源:中国区域创新能力评价BG 4、指标包括: 区域创新能力综合效用值、知识创造效用值、知识获取效用值、企业创新效用值、创新环境…

《Composing Programs》(SICP python版) chap1 笔记(2)

《Composing Programs》(SICP python版) chap1 笔记(2) 文章目录《Composing Programs》(SICP python版) chap1 笔记(2)Chapter 1: Building Abstractions with Functions1.3 Defining New Functions1.3.1 EnvironmentsFunction Signatures(看语境翻译为函数原型比较…

【论文翻译】ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation

【论文】https://arxiv.org/abs/2204.12484v3 【github】GitHub - ViTAE-Transformer/ViTPose: The official repo for [NeurIPS22] "ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation" and [Arxiv22] "ViTPose: Vision Transformer F…

IO流操作

文章目录一、字符集常见字符集编码、解码操作二、IO流FileInputStreamFileOutputStreamFileReaderFileWriter常见问题一、字符集 常见字符集 我们的计算机底层是不可以直接存储字符的,计算机中底层只能存储二进制(0、1),同时二进制是可以转换成十进制的…

Fluent UDF编译环境配置 VS2019

Fluent UDF编译环境配置 VS2019环境配置问题记录继续记录调试过程仅用一个host仅用一个node两个都放进去换个电脑继续报错记录错误环境配置 生成PATH文件的,有的没有权限在当前文件夹,可以用这个命令,还是原来的代码,就是改一下 …

趣味三角——前言和序言

目录 1. 前言 2. 序言 2.1 抄写员Ahmes,公元前1650年 2.2 古埃及的趣味数学 1. 前言 There is perhaps nothing which so occupies the middle position of mathematics as trigonometry. (也许,没有什么东西像三角学一样占据数学的中心位置…

离散数学-图论-欧拉图、哈密顿图、二部图、平面图(14)

欧拉图、哈密顿图、二部图、平面图 1 欧拉图 无向图G是欧拉图⇔\Leftrightarrow⇔G连通,且无奇度点。无向图G是半欧拉图⇔\Leftrightarrow⇔G连通,且仅有两个奇度点。有向图G是欧拉图⇔\Leftrightarrow⇔G强连通,且所有顶点的入度出度。有向图G是半欧拉图⇔\Leftrightarrow⇔…

登录时“自动填充”和“验证码”的实现

自动填充和验证码的实现需求1. 基础登录功能1.1 持久层pojo实体类:代理接口:1.2 业务层1.3 表现层login.jsp(登陆界面):LoginServlet:selectAllServlet:brand.jsp(登陆成功&#xff…

30.Isaac教程--Costmap规划器

Costmap规划器 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Costmap规划器组件消息入门自定义图使用自定义地图改变规划器将 Costmap 添加到视线中将通道添加到配置Isaac SDK 中的标准导航规划器指示机器人在避开障碍物的同时采用最短…

赛意SMOM和金蝶云星空单据接口对接

赛意SMOM和金蝶云星空单据接口对接数据源系统:金蝶云星空金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用框架等,有效支持企业的运营…

数据结构进阶 unordered系列的效率对比

作者:小萌新 专栏:数据结构进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:对比map set和unordered系列map和set的效率 unordered系列的效率对比map/set与unordered_map/unordered_set的区别map/set与uno…

HTTP简史

今天一起来研究Http协议的一些事情,通过本文你将了解到以下内容:Http协议各版本的对比和优缺点Http2.0协议相关的SPDY协议、二进制分帧协议、多路复用、首部压缩、服务推送等基本原理HTTP3.0和QUIC协议乘风破浪前往知识的海洋吧,要开船了&…

Linux常用命令——telnet命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) telnet 登录远程主机和管理(测试ip端口是否连通) 补充说明 telnet命令用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开…

【Java IO流】字符流详解

文章目录1. 前言2. 字符输入流3. 字符输出流4. 字符流底层原理解析4.1 字符输入流4.2 字符输出流1. 前言 在上一篇字符集详解中我们说到了产生乱码的原因,要么是读取数据时未读完整个汉字,要么是因为编码和解码的方式不统一,对于后者我们只需…

PromQL之函数

Prometheus 版本 2.41.0 平台统一监控的介绍和调研直观感受PromQL及其数据类型PromQL之选择器和运算符PromQL之函数 PromQL 聚合函数 PromQL 的聚合函数只能用于瞬时向量,支持的聚合函数有: sum 求和min 最小值max 最大值avg 平均值group 分组&#xf…

Nginx与LUA(5)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~Nginx诞生以来就获赞无数,反向代理、负载均衡、流量限制与流量扩展都是它的拿手好戏。基本上是互联网应用的主流入口,和计算、即时通讯、存…

python批量下载modis数据(可筛选日期、范围、数据类型)

找了一圈下modis数据的,有的不能空间筛选有的不能下初级产品(也可能没找到),不甚满意,自己搞了个 0 前言 用到的主要依赖是selenium,下载网站是https://ladsweb.modaps.eosdis.nasa.gov,环境是…

ensp实现不同VLAN之间的通信

1.VLAN的基本配置 一个简单的VLAN实验&#xff0c;基本配置如图。 其中交换机为S5700。 在只对四台PC配置IP地址&#xff0c;交换机不用配置后&#xff0c;四台PC可以互相ping通。 下面是对交换机配置VLAN的方法 <Huawei>sys #进入系统视图 [Huawei…