【Linux杂货铺】期末总结篇4:shell编程

在这里插入图片描述
🌈个人主页:聆风吟_
🔥系列专栏:Linux实践室、网络奇遇记
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

  • 一. ⛳️什么是Shell脚本?
  • 二. ⛳️Shell 入门
  • 三. ⛳️Shell 变量
    • 3.1 🔔变量定义
    • 3.2 🔔变量访问
    • 3.3 🔔变量类型(未完待续)
  • 四. ⛳️shell 输入输出
    • 4.1 🔔变量值输出
      • 4.1.1 echo输出
      • 4.1.2 printf输出
    • 4.2 🔔变量值输入
  • 五. ⛳️ 数组
    • 5.1 🔔数组定义
    • 5.2 🔔读取数组元素值
  • 六. ⛳️表达式
    • 6.1 🔔算术表达式
    • 6.2 🔔逻辑表达式
  • 七. ⛳️Shell 控制结构
    • 7.1 🔔分支结构:if语句
      • 7.1.1 单分支语句
      • 7.1.2 两分支语句
      • 7.1.3 多分支语句
    • 7.2 🔔分支结构:case语句
    • 7.3 🔔循环结构:for语句
    • 7.4 🔔循环结构:while语句
    • 7.5 🔔循环结构:until语句
  • 八. ⛳️Shell函数
    • 8.1 🔔函数定义
    • 8.2 🔔函数调用与参数传递
    • 8.3 🔔函数的返回值
  • 📝全文总结

一. ⛳️什么是Shell脚本?

基于Shell语言的语法规则编写而成,支持Linux/UNIX下的命令的调用。

在这里插入图片描述



二. ⛳️Shell 入门

文本编辑工具:vi/vim,gedit

#创建一个文本文件test.sh
vi test.sh

运行Shell脚本的几种方法:

#方法一:为Shell脚本添加可执行权限
#chomd命令:可以给Shell脚本加上执行权限
chmod +x test.sh	#给脚本添加运行权限
./test.sh			#运行脚本文件,注意./不能省略#方法二:直接使用Bash或sh来运行Shell脚本
bash test.sh	#使用Bash运行Shell脚本
sh test.sh		#使用sh运行Shell脚本#方法三:使用source命令运行Shell脚本
#source命令:强制执行脚本文件的全部命令,并不需要事先修改脚本文件的权限
source test.sh
#也可以简写为如下方式,"."和文件名之间有一个空格
. test.sh


三. ⛳️Shell 变量

3.1 🔔变量定义

#变量的定义格式:
变量名=变量值	#等号两边不能有空格#shell支持以下3种定义变量的方式
VariableName=VariableValue
#如果VariableValue包含了空格符,那么就必须使用引号;单双引号区别在变量访问中讲解。
VariableName='VariableValue'
VariableName="VariableValue"

3.2 🔔变量访问

#要获取一个变量的值,只须在变量名前面加一个$。
#注意:在对变量重新赋值时,不能在变量名前加$。
author=zp
echo ${author}	#输出:zp;#变量名称的边界
#给变量加花括号 “{}” 可以帮助解释器准确识别变量的边界。
language="Shell"
#加{}避免把languageScript当作变量处理
echo "It's a ${language}Script file"	#输出:It's a ShellScript file#引号的使用
#单引号:以单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令,也会它们原样输出
#双引号:以双引号" "包围变量的值时,不是把双引号中的变量名和命令原样输出,而是会先解析里面的变量和命令,然后再输出。#命令替换 —— 通过命令替换,可达到将命令的执行结果赋值给变量的目的。
#第一种:把命令用反引号` `包裹起来,移植性高。
#第二种:把命令用$()包围起来。
echo "Today is $(date)"
echo "Today is `date`"

3.3 🔔变量类型(未完待续)



四. ⛳️shell 输入输出

4.1 🔔变量值输出

4.1.1 echo输出

echo命令发送数据到标准的输出设备,并以字符串的方式输出一个变量

选项说明
-e识别输出内容里面的转义字符
-n忽略结尾的换行
echo "Hello\tShell"			#输出:Hello\tShell
echo -e "Hello\tShell"		#输出:Hello	Shell
echo -n "Hello\tShell"		#输出:Hello\tShellzp@lab:~/shell$ 

4.1.2 printf输出

printf支持格式化输出。printf的默认输出不换行,换行时需要用户手动加 “\n”

printf "Hello\tShell"		#输出:Hello	Shell@lab:~/shell$,识别转义字符,无换行功能
printf "Hello\tShell\n"		#输出:Hello	Shellprintf "%c" $c

4.2 🔔变量值输入

#read命令用于读取标准输入设备的下一行。
read [参数] [变量名]#输入多个变量值
#从标准输入读取一行(直至遇到第一个空白或换行符),并将第一个词和剩余部分分别赋值给first和last
read first last


五. ⛳️ 数组

5.1 🔔数组定义

Bash Shell只支持一维数组,初始化不需要定义数组大小,数组元素的编号由0开始。

#数组定义格式:
array_name=(value1 value2 ... valuen) #Shell数组用括号来表示,元素之间用空格隔开#下标定义
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
#赋值号=的两边不能有空格,其必须紧挨着数组名和数组元素

5.2 🔔读取数组元素值

#读取数组元素值
${array_name[index]}#获取数组中的所有元素
${array_name[@]}
#或
${array_name[*]}#获取数组长度
${#array_name[@]}
#或
${#array_name[*]}


六. ⛳️表达式

6.1 🔔算术表达式

#使用expr命令时需要注意:操作数(用于计算的数)和运算符之间一定要用空格
val=`expr 100 / 2`
echo $val#使用$[]表达式进行数学运算,此时不要求运算符与操作数之间有空格
echo $[100/2]

6.2 🔔逻辑表达式

使用test命令及其别名来检查逻辑表达式是否成立。

#test命令的语法格式:
test 逻辑表达式
#用例
test 2 = 2	#正确示例:等号前后都有空格#test命令有一个别名,即左方括号,其语法格式:
[ 逻辑表达式 ]	#使用左方括号时,逻辑表达式两边必须有空格
#用例
[ 2 = 2 ]	#正确示例:等号前后均有空格,数字与方括号间亦有空格

七. ⛳️Shell 控制结构

7.1 🔔分支结构:if语句

7.1.1 单分支语句

#单分支语句:
if condition
then语句
fi#注意:then可以和if写在一行,必须要在condition后面加分号。
if condition; then语句
fi

condition部分:一般可以使用 “(())” 或者 “[]” 来计算逻辑表达式的值,前者与c的语法规则更加接近,推荐使用。


7.1.2 两分支语句

#两个分支
if condition
then语句1
else语句2
fi

7.1.3 多分支语句

#多分支if
if condition1
then语句1
elif condition2语句2
elif condition3语句3
...
else语句n
fi

7.2 🔔分支结构:case语句

#case、in和esac都是Shell关键字
#expression表示表达式
#pattern表示匹配模式
case expression inpattern1)语句1;;pattern2)语句2;;pattern3)语句3;;...*)语句n
esac

7.3 🔔循环结构:for语句

#c语言风格的for循环,语法格式:
for ((exp1; exp2; exp3))
do语句
done # ((sum +=i))做运算等于C语言中sum += i#python语言风格的for循环,语法格式:
for variable in value_list
do语句
done

7.4 🔔循环结构:while语句

#while循环用于不断执行一系列命令,直到测试条件为假时才终止循环。
#语法格式:
while condition
do语句
done

7.5 🔔循环结构:until语句

#until循环用于执行一系列命令,直到所指定的条件为真时才终止循环。
#语法格式:
until condition
do语句
done


八. ⛳️Shell函数

8.1 🔔函数定义

#Shell函数必须先定义,后使用。代码格式:
[function] 函数名(){语句序列[return 返回值]
}#functin关键字可以省略不写
#如果加上function,则函数名后面的小括号可以省略
function 函数名{语句序列[return 返回值]
}

8.2 🔔函数调用与参数传递

#不传递参数,可以直接给出函数名,调用方式:
函数名#传递参数,函数名后面接参数列表,参数之间以空格分隔。调用方式:
函数名 参数1 参数2 ... 参数n#函数参数是位置参数的一种,可以使用$n在函数内部接受调用时传递参数。
#$1表示第一个参数,$2表示第二个参数,以此类推。#可以通过$#获取所传递参数的个数。#可以通过$@或者$*一次获取所有参数。

8.3 🔔函数的返回值

Shell函数中的return关键字用于表示函数执行的成功与否。返回重要数据时可能事与愿违,尤其是非数值类型的数据。

获取Shell函数返回结果的方法:

  • 直接从函数内部输出数据。
  • 使用全局变量。Shell函数中定义的变量默认是全局变量,函数与其所在脚本共享该全局变量。可以使用local关键字定义局部变量。
  • 使用内置变量。通过$?这一特殊的内置变量,来获取上一个命令执行后的返回结果。


📝全文总结

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!
在这里插入图片描述

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

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

相关文章

Kotlin中Unit、Any和Nothing

Unit Unit是一个特殊的类型,它表示“没有意义的值”的单元类型。在Kotlin中,当你不需要函数返回任何具体值时,可以使用Unit类型。 和Java 中 void一样。 Any 所有非空类的父类 Any?所有类的父类 类似Java中Object Nothing 表示一个函数或…

旗晟巡检机器人的应用场景有哪些?

巡检机器人作为现代科技的杰出成果,已广泛应用于各个关键场景。从危险的工业现场到至关重要的基础设施,它们的身影无处不在。它们以精准、高效、不知疲倦的特性,担当起保障生产、守护安全的重任,为行业发展注入新的活力。那么&…

如何使用简鹿水印助手或 Photoshop 给照片添加文字

在社交媒体中,为照片添加个性化的文字已经成为了一种流行趋势。无论是添加注释、引用名言还是表达情感,文字都能够为图片增添额外的意义和风格。本篇文章将使用“简鹿水印助手”和“Adobe Photoshop”这两种工具给照片添加文字的详细步骤。 使用简鹿水印…

IDEA实现NPM项目的自打包自发布自部署

目录 前言 正文 操作背景 NPM自发布 Package自发布 NPM部署 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.👯 I’m studying in University of Nottingham Ningbo China&#x1f…

射线和平面求交

射线和平面求交 1、平面方程 如果已知平面的高度(即沿法向量方向的距离)为 height,平面方程可以表示为: n ^ ⋅ p h e i g h t \bold{\hat{n}} \cdot p height n^⋅pheight p p p 是平面上的任意一点 height 的正负取决于法向量…

W外链创建抖音私信卡片教程,私信卡片跳转微信工具

W外链地址wai.cn 在数字化时代的浪潮中,私域流量的价值愈发凸显,成为企业获取用户、建立品牌忠诚度、提升转化率的关键手段。抖音,作为当下最热门的短视频社交平台之一,其用户基数庞大、互动性强,为企业私域引流提供了…

一些颜色的RGB整理

(214,219,233) (215,220,230) (189,189,189) (193,210,240) (190,210,240) (0,60,119) (0,60,120) (230,230,250)

初识Docker及管理Docker

Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术:Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器(阿里系)搜索镜像获取镜像查看镜像信息…

计算机网络技术期末复习

一. 填空 在采用电信号表达数据的系统中,数据有 数字数据 和 模拟数据 两种。域名系统DNS是一个 分布式数据库 系统。TCP/IP的网络层最重要的协议是 IP互连网协议,它可将多个网络连成一个互连网。 4. 在TCP/IP层次模型的网络层中包括的协议主要有ARP 、…

科技出海|百分点科技智慧政务解决方案亮相非洲展会

近日,华为非洲全联接大会在南非约翰内斯堡举办,吸引政府官员行业专家、思想领袖、生态伙伴等2,000多人参会,百分点科技作为华为云生态合作伙伴,重点展示了智慧政务解决方案,发表《Enable a Smarter Government with Da…

Web开发:卡片翻转效果(HTML、CSS)

目录 一、实现效果 二、完整代码 三、实现过程 1、页面结构 2、初始样式 3、翻转效果 4、图片大小问题 一、实现效果 如下图所示,当鼠标移入某个盒子,就反转这个盒子,并显示其背面的内容——卡片翻转效果; 卡片翻转效果 二…

Linux网络编程-socket套接字使用详解

1.概念 在Linux中,套接字(socket)是一种通信机制,用于实现不同进程之间或同一主机上的不同线程之间的数据交换。它是网络编程的基础,允许应用程序通过网络进行通信,也可以在同一台机器上的不同进程间进行通…

集群服务器如何解决跨服务器通信?大量并发通信问题?

Nginx tcp负载均衡模块: 1.将client的请求按照 负载均衡算法 分发到服务器 2.负载均衡器与服务器保持心跳机制,监测故障、保障服务可靠性 3.可以发现添加新的服务器,方便扩展服务器集群的数量 Nginx反向代理用途: 2.4 用途 …

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…

php随机海量高清壁纸系统源码,数据采集于网络,使用很方便

2022 多个分类随机海量高清壁纸系统源码,核心文件就两个,php文件负责采集,html负责显示,很简单。做流量工具还是不错的。 非第三方接口,图片数据采集壁纸多多官方所有数据! 大家拿去自行研究哈&#xff0…

在 Windows 上开发.NET MAUI 应用_2.生成你的第一个应用

先决条件 Visual Studio 2022 17.8 或更高版本,并安装了 .NET Multi-platform App UI 工作负载。 可参考上一篇文章:http://t.csdnimg.cn/n38Yy 创建应用 1.启动 Visual Studio 2022。 在开始窗口中,单击“创建新项目”以创建新项目&#…

【B树、B-树、B+、B*树】

目录 一、B-树(即B树)的定义及操作1.1、定义1.2、操作1.2.1、查找1.2.2、插入1.2.3、删除 二、B树的定义及操作2.1、定义2.2、操作2.2.1、查找2.2.2、插入2.2.3、删除 三、B*树 一、B-树(即B树)的定义及操作 1.1、定义 B-tree即…

【c++11】什么情况下需要封装set/get

文章目录 一、平凡类型与非平凡类型什么时候使用set/get1.平凡类型2.非平凡类型 二、构造函数参数较多解决办法1.把所有参数放到一个结构体里面2.使用build设计模式 三、如果构造函数众多(参数很多)1.模仿make_unique,就地构造2.基于build设计…

Missing script:‘dev‘

场景: npm run dev 原因:没有安装依赖,可用镜像安装(详见下图ReadMe 蓝色字体),没安装依赖可从package-lock.json文件是否存在看出,存在则有依赖 解决:

二叉树、B树/B-树

二叉树 在中文语境中,节点结点傻傻分不清楚,故后文以 node 代表 "结点",root node 代表根节点,child node 代表 “子节点” 二叉树是诸多树状结构的始祖,至于为什么不是三叉树,四叉树,或许是因为计算机只能数到二吧,哈哈,开个玩笑。二叉树很简单,每个 no…