shell编程基础笔记

目录

echo改字体颜色和字体背景颜色

bash基本功能:

运行方式:推荐使用第二种方法

变量类型

字符串处理:

条件判断:(使用echo $?来判断条件结果,0为true,1为false)

条件语句:

循环语句

特殊流程控制语句

read读取控制台输入

函数

数组:

切片


部分图片截取自【尚硅谷Linux系统管理教程(linux系统管理精讲)】https://www.bilibili.com/video/BV1ut411a7ro?vd_source=4aa5c9ca48e929b37821b89859f00208B仅供学习使用,感谢!

echo改字体颜色和字体背景颜色

bash基本功能:

 ①。查看历史输入命令history,最大存储在磁盘1000条,可进入/etc/profile进行修改HISTSIZE=1000,进行扩充;

补充:可以使用上下箭头进行历史命令的切换,也可以使用“!历史命令行号”

 ②。命令改别名alias,进入/root/.bashrc可进行修改,使用source /root/.bashrc进行更新,可使用“unalias  别名”进行删除

加入--color=auto显示颜色

 ③。错误输出重定向追加保存:“错误命令  2>> 文件”(只能保存错误命令)

正确输出和错误输出同时重定向追加保存:“命令  >> 文件    2>&1/    "命令  &>> 文件"

         分别保存正确错误文件:“命令>>文件 2>>文件2

④。多命令顺序执行:

1)。“;”    顺序执行多命令并结果互不影响

2)。“&&” 前者正确,执行后者

3)。“ || ”   前者错误,执行后者

⑤。bash中其他特殊符号(重点注意)

 ‘’单引号,所见即所得,不能在单引号内再使用单引号。

 “”双引号,拥有“调用变量的值”,“引用命令”,“转义字符”的特殊含义,双引号可以嵌套单引号,但不能直接嵌套双引号或反引号。

    ``     反引号,其括起来的内容是系统命令,可以调用系统命令将结果赋值给一个变量例如:a=`ls /root`

   $()  和反引号作用一样,用来引用系统命令。(推荐使用)

   ()   用于一串命令执行时,()中的命令会在子shell中运行(相当于执行局部变量)

   {}   用于一串命令执行时,{}中的命令会在当前shell中执行,也可以用于变量变形与替换 (相当于执行全局变量

⑥。bash快捷键

查看系统所有快捷键:stty   -a

修改系统快捷键:stty   关键字     快捷键

运行方式:推荐使用第二种方法

①.bash/sh + 绝对/相对路径

.赋予执行权限chmod +x  文件,以后可以直接用路径调用不需要加bash/sh(相对路径要加./

③.脚本路径前加".空格"或者source

变量类型

①.预定义变量

$?     功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体实施那个数,有命令自己来决定),则证明上一个命令执行不正确

$$        查看当前进程的进程号(PID)

$!         后台运行的最后一个进程的进程号(PID

②。环境变量

常用系统变量$HOME ,$PWD,$SHELL,$USER

查看系统变量值:echo $HOME

1)。PATH:系统查找命令的路径

PATH变量的值是用“:”分割的路径,这些路径就是系统查找命令的路径。也就是说当我们输入一个程序名,如果没有写入路径,系统就会到PATH变量定义的路径中去寻找,是否有可以执行的程序。如果找到则执行,否则会报“命令没有发现”的错误

自已定义的脚本也可以通过将脚本复制到PATH变量定义的路径中,或者使用PATH=$PATH:/root/sh修改PATH变量的值进行叠加,就可以不输入路径而直接运行

2)。PS1变量:命令提示符设置

PS1,是用来定义命令行的提示符,可以按照我们自己的需求来定义自己喜欢的提示符,PS1支持以下这些选项

3)LANG语系变量

LANG变量定义了Linux系统的主语系环境,这个变量的默认值

可以使用locale -a | more来查看支持的语系

4)环境变量配置文件调用过程

③。位置参数变量

特殊变量

$n         功能描述:n为数字,$0代表脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}

$#         功能描述:获取所有输入参数个数,常用于循环
$*       功能描述:这个变量代表命令行中的所有参数,$*把所有的参数看成了一个整体

$@     功能描述:这个变量也代表命令行中的所有参数,不过$@把每一个参数区分对待

举例

④.自定义变量

基本语法:

定义变量:变量名=变量值,注意=前后不能有空格(定义变量不需要加$,调用变量需要给变量前加$

撤销变量:unset   变量名

声明静态变量:readonly 变量,注意:不能unset

使用“export 变量(declare -x  变量)”可以把变量升级为全局(环境)变量,供其他变量使用(例如将父shell继承给子shell)

变量连接:变量=“$变量”连接值

变量定义规则:

变量名称由字母,数字,下划线组成,不能以数字开头,环境变量建议大写

等号两侧不能有空格

在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

变量的值如果有空格,需要使用双引号和单引号括起来

字符串处理:

①。cut列提取命令

  cut    [选项]    文件名

选项:

-d 分隔符:按照指定分隔符进行分列

-f   列号:提取第几列,一般与-d联用,cut命令的默认分隔符为制表符tab键,不对空格支持

-c  字符范围: 不依赖分隔符来区分列,而是通过字符范围(行首为1)来进行字段提取。“n-”表示从第n个字符到行尾;“n-m”从第n个字符到第m个字符;“-m”表示从第一个字符到第m个字符。

②。  Awk

列数表示直接为"$数字"

可以使用“-F 分隔符”来进行分割,注意引号的使用

 

1)。printf  输出

2)。 awk基本使用      awk   ‘条件1  {动作1}  条件2  {动作2}….’   文件名      (动作写在{}中,转义字符和字符串需要用“”括起来,

awk解决cut不能处理的空格问题

3)awk内置变量

注意:当使用FS时,可能第一行没有起作用,可能是需要加BEGIN条件

③。sed命令

列数表示直接为数字

sed命令主要是用来将数据进行选取,替换,删除,新增的命令

格式:sed    [选项]    '[动作]'    文件名

注意:1)如果想追加或插入多行数据,除最后一行外,每行的末尾都要加入“\”代表数据未完结;

2)-d只有行删除,没有具体的字符串删除功能,可以使用s将字符串替换为空,即可达到删除字符串的效果

3)多条动作之间要用“;”号或回车进行分割(一般与-e配合使用),当使用-e对多条命令进行编辑时,要与命令紧挨使用,中间不能有其他选项

4)指定行范围可以用“,”例如1,3表示第一行到第三行

④。排序命令sort

格式:sort    [选项]   文件名

补充:-k     指定字段号,一般与-t搭配使用,当-t分割后可以选择指定字段号;“-k  3”表示从第三个字段到行尾排序

⑤。uniq命令

uniq命令是用来取消重复行,其实和“sort  -u”是一样的

格式:uniq   [选项]   文件名

选项:-i: 忽略大小写

⑥。统计命令wc

格式:wc  [选项]   文件名

选项:-l:   只统计行数

-w :只统计单词数

-m:只统计字符数

条件判断:(使用echo $?来判断条件结果,0true1false

基本语法:①.test  判断条件

.[ 判断条件 ]           (注意条件前后距离[]要有空格,等号前后也要有空格)

常用判断条件:

.两个整数之间比较

②.按照文件权限进行判断

③.按照文件类型进行判断

④.两个文件之间进行比较

⑤。字符串比较

⑥。多重条件比较

条件语句:

注意:条件判断式不用再额外加中括号,例子多加了一层中括号

①.if判断基本语法:

单分支:

 if   [ 条件判断式 ];then

 程序

 fi

或者

 if [ 条件判断式 ]

 then

       程序

 fi

多分支:

 if [ 条件判断式 ]

 then

       程序

 elif [ 条件判断式 ]

 then

       程序

 else

程序

 fi

注意事项:[   条件判断式   ],中括号和条件判断式之间必须要有空格,if后要有空格

②.case语句基本语法

 case   $变量名 in

“值1”)

如果变量的值等于值1,则执行程序1

;;

 “值2”)

如果变量的值等于值2,则执行程序2

;;

………..省略其他分支

 *)

如果变量的值都不是以上的值,则执行此程序

;;

 esac

注意事项:①case行尾必须为单词“in”,每一行模式匹配必须以右括号“)”结束

②双分号“;;”表示命令序列结束,相当于break

③最后的“*)”表示默认模式,相当于default

循环语句

并发控制(补充)

&   将程序放置后台运行

Wait    允许脚本等待一个或多个后台进程完成

一种做法:

for语句

      do {

循环体

}&

Wait

①for循环基本语法:

 for((初始值;循环条件控制;变量变化))

 do

          程序

 done

 ② for in循环基本语法:

 for 变量  in  值1 值2 值3……

 do

程序

 done

③$*,$@基本语法:两个均代表命令行中的所有参数,$*将所有参数看成一个整体,$@把每个参数区分对待

比较:$*,$@都表示传递给函数或脚本的所有参数,不被双引号包含时,都以$1 $2 $3…..的形式分开输出所有参数;

 当它们被双引号包含时,$*会以“$1 $2 $3….”按整体的形式输出所有参数,$@以$1 $2 $3…..的形式分开输出所有参数

④,while/until循环基本语法

while只要条件判断式不成立时跳出循环

until只要条件判断式成立则跳出循环

 while/until [ 条件判断式 ]

 do

         程序

 done

特殊流程控制语句

①,exit语句

系统的exit命令,是用于退出当前用户的登陆状态;

在shell脚本中,exit语句是用来退出当前脚本的,只要碰到exit语句,后续的程序就不再执行

语法:exit  [返回值]

可以使用$?来查看exit的返回值

②,break和continue

read读取控制台输入

基本语法:read     (选项)  (参数)

选项:-p:指定读取值时的提示符;

  -t:指定读取值时等待的时间 (秒)。

  -n:   指定接受的字符数

  -s:   隐藏输入的数据

参数:

变量:指定读取值的变量名

注意:字符串比较时,等号前后要有空格,否则计算机会识别为赋值语句,定义变量时不要有空格

若输入错误可以ctrl+退格键删除

函数

系统函数

①basename

 基本语法:basename [string/pathname] [suffix]

 功能描述:basename命令会删掉所有的前缀包括最后一个("/")字符,然后将字符串显示出来。

 选项:suffix为后缀,如果suffix被指定了,basename会将pathname或suffix去掉

②dirname

Dirname  文件绝对路径

功能描述:dirname命令会获取所有的前缀路径

自定义函数

基本语法

[function]  函数名()

{

函数体;

[return int;]

}

经验技巧:

①。必须在调用函数地方之前,先声明函数,shell脚本是逐步运行的,不会像其他语言一样先编译

②,函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令结果作为返回值,return后跟数值n(0-255)

数组:

注意:查看和引用数组时需要加{}包裹数组

 

①,定义数组

数组名=(元素1  元素2  元素3,元素n)

数组名[下标]=变量值

元素定义示例:

②,查看数组

declare   -a  |grep   目标数组

③,访问数组

④,关联数组

功能:自定义索引;

语法:先声明关联数组

  declare  -A  关联数组名

  数组名=([自定义数组名1]=值1  [自定义数组名2]=值2 ………..)

  people=([p1]=li [pi2]=wang [p3]=zhang [p4]="ni ba")  

切片

格式:{变量名:起始索引:步长}    (注意:步长省略则是截取到末尾,$后面一定要加{})

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

maxun爬虫工具docker搭建

思路来源开源无代码网络数据提取平台Maxun 先把代码克隆到本地(只有第一次需要) git clone https://github.com/getmaxun/maxun.git 转到maxun目录 cd maxun 启动容器 docker-compose --env-file .env up -d 成功启动六个容器 网址 http://local…

redis揭秘-redis01-redis单例与集群安装总结

文章目录 【README】【1】安装单机【1.1】安装环境【1.2】安装步骤 【2】redis集群主从模式配置【2.1】集群架构【2.2】redis集群主从模式搭建步骤【2.3】redis集群主从模式的问题(单点故障问题) 【3】redis集群哨兵模式配置【3.1】集群架构【3.2】redis…

构建高可用系统设计OpenStack、Docker、Mesos和Kubernetes(简称K8s)

如果构建高可用、高并发、高效运维的大型系统 大型系统架构设计包括业务层设计、服务层设计、基础架层设计、存储层设计、网络层协同设计来完成。 一、业务层 根据主要业务范畴的分类和特征提取,抽象出独立的业务系统,分别统计系统的用户角色群体、访…

mrRobot解题过程

一、靶场环境需要桥接网络 不建议使用校园网,因为使用校园网进行主机探索的时候会出现数不完的主机。 arp-scan -l若是流量少只能用校园网,便在这里看靶机ip 二、端口扫描 我习惯用fscan了(需要自己安装),你们用nma…

解决“ VMware Tools for Windows Vista and later“报错问题

今天,在Win7虚拟机上安装VMware Tools,报"VMware Tools for Windows Vista and later"证书错误,如图(1)所示: 图(1) 虚拟机报" VMware Tools for Windows Vista and later"证书错误 问题原因:VMwa…

C-操作符

操作符种类 在C语言中,操作符有以下几种: 算术操作符 移位操作符 位操作符 逻辑操作符 条件操作符 逗号表达式 下标引用,函数调用 拓展:整型提升 我们介绍常用的几个 算术操作符 (加)&#xff…

时频转换 | Matlab基于S变换S-transform一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式基本介绍 时频转换 | Matlab基于S变换S-transform一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x =

物联网——WatchDog(监听器)

看门狗简介 独立看门狗框图 看门狗原理:定时器溢出,产生系统复位信号;若定时‘喂狗’则不产生系统复位信号 定时中断基本结构(对比) IWDG键寄存器 独立看门狗超时时间 WWDG(窗口看门狗) WWDG特性 WWDG超时时间 由于…

Socket编程:UDP网络编程项目

目录 一、回显服务器 二、翻译器 三、聊天室 一、回显服务器 项目介绍:使用UDPIPv4协议进行Linux网络编程,实现回显服务器和客户端 功能介绍:客户端发送数据,经过服务端再返回到客户端,输出数据 源代码&#xff1…

Hbase2.2.7集群部署

环境说明 准备三台服务器,分别为:bigdata141(作为Hbase主节点)、bigdata142、bigdata143确保hadoop和zookeeper集群都先启动好我这边的hadoop版本为3.2.0,zookeeper版本为3.5.8 下载安装包 下载链接:In…

STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58

STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58 STM32F407芯片的OPTION Byte全面解析 STM32F407芯片是STMicroelectronics推出的一款功能强大的微控制器,广泛应用于工业控制、通信和消费电子等领域。其中,OPTION Byte&#xff0…

Matlab 绘制雷达图像完全案例和官方教程(亲测)

首先上官方教程链接 polarplothttps://ww2.mathworks.cn/help/matlab/ref/polarplot.html 上实例 % 定义角度向量和径向向量 theta linspace(0, 2*pi, 5); r1 [1, 2, 1.5, 2.5, 1]; r2 [2, 1, 2.5, 1.5, 2];% 绘制两个雷达图 polarplot(theta, r1, r-, LineWidth, 2); hold …

【C/C++】内存管理详解:从new/delete到智能指针的全面解析

文章目录 更多文章C/C中的传统内存管理方式new和delete运算符malloc和free函数传统内存管理的弊端 智能指针的崛起智能指针的定义与作用C11引入的标准智能指针 详解C标准智能指针std::unique_ptr特点使用方法适用场景 std::shared_ptr特点使用方法适用场景 std::weak_ptr特点使…

Python实现2048小游戏

2048是一个单人益智游戏,目标是移动和合并数字,以达到2048。 1. 实现效果 Python实现2048小游戏 2. 游戏规则 简单地理解一下规则 基本规则: 4x4棋盘,每个格可包含一个2的倍数的数字,初始时为空,表示0。…

Wireshark常用功能使用说明

此处用于记录下本人所使用 wireshark 所可能用到的小技巧。Wireshark是一款强大的数据包分析工具,此处仅介绍常用功能。 Wireshark常用功能使用说明 1.相关介绍1.1.工具栏功能介绍1.1.1.时间戳/分组列表概况等设置 1.2.Windows抓包 2.wireshark过滤器规则2.1.wiresh…

像素流送api ue多人访问需要什么显卡服务器

关于像素流送UE推流,在之前的文章里其实小芹和大家聊过很多,不过今天偶然搜索发现还是有很多小伙伴,在搜索像素流送相关的问题,搜索引擎给的提示有这些。当然这些都是比较短的词汇,可能每个人真正遇到的问题和想获取的…

基于Vue3+Element Plus 实现多表单校验

使用场景 表单校验在日常的开发需求中是一种很常见的需求,通常在提交表单发起请求前校验用户输入是否符合规则,通常只需formRef.value.validate()即可校验,但是,例如一些多步骤表单、动态表单、以及不同的用户角色可能看到不同的表…

ONVIF协议网络摄像机客户端使用gsoap获取RTSP流地址GStreamer拉流播放

什么是ONVIF协议 ONVIF(开放式网络视频接口论坛)是一个全球性的开放式行业论坛,旨在促进开发和使用基于物理IP的安全产品接口的全球开放标准。 ONVIF规范的目标是建立一个网络视频框架协议,使不同厂商生产的网络视频产品完全互通。…

【Datawhale组队学习】模型减肥秘籍:模型压缩技术6——项目实践

NNI (Neural Network Intelligence) 是由微软开发的一个开源自动化机器学习(AutoML)库,用于帮助研究人员和开发人员高效地进行机器学习实验。它提供了一套丰富的工具来进行模型调优、神经网络架构搜索、模型压缩以及自动化的超参数搜索。 1…

通讯专题4.1——CAN通信之计算机网络与现场总线

从通讯专题4开始,来学习CAN总线的内容。 为了更好的学习CAN,先从计算机网络与现场总线开始了解。 1 计算机网络体系的结构 在我们生活当中,有许多的网络,如交通网(铁路、公路等)、通信网(电信、…