Linux--shell脚本详解

news2025/7/15 3:38:42

目录

一、shell脚本的类型

二、read命令

三、数组

3.1 定义数组

3.2 赋值数组元素

3.3 取得元素个数

3.4 取得单个元素长度

3.5 取消或删除数组中的元素

四、赋值时使用引号的作用

五、位置参数

5.1 $* 和 $@的区别

六、预定义变量

七、变量的算术运算

 7.1  双小括号 (())  数值运算命令的用法

 7.2 let 运算命令的用法

 7.3 expr 命令的用法

7.3.1 expr配合变量计算

 7.3.2 利用 expr 计算字符串的长度

八、条件测试

8.1 条件测试语句

8.2 文件测试操作符

8.3 字符串测试操作符

8.4 测试表达式 test 、[] 、[[]] 、 (()) 的区别

 九、if 条件判断语句

9.1 单条件语句

9.2 多条件语句

十、case条件判断语句

十一、for循环语句

11.1 例子:计算指定数值之内的和

11.2 例子:区别$*和$@

 十二、while循环语句

 十三、shell函数

13.1 语法格式


一、shell脚本的类型

常见的shell分为两大主流:

sh 和 csh

查看系统默认的shell:echo $SHELL

查看系统支持的shell: cat  /etc/shells

二、read命令

read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) -s(隐藏输入)  

例子:

read -t 30 -p please input your name: NAME

echo $NAME

三、数组

bash只支持一维数组,不支持多维数组

3.1 定义数组

array_name = (li wang xiang zhang)         # (小括号做边界、使用空格分离)

3.2 赋值数组元素

array_name[0]=“zhao”

3.3 取得元素个数

${#array_name[@]} 或者 ${#array_name[*]}

3.4 取得单个元素长度

${#array_name[1]}

3.5 取消或删除数组中的元素

unset array_name[4]

四、赋值时使用引号的作用

  • 双引号:允许通过$符号引用其他变量值
  • 单引号:禁止引用其他变量值,$视为普通字符
  • 反撇号:命令替换,提取命令执行后的输出结果 全局变量的定义方法 export 变量名

五、位置参数

位置参数是一种在调用 Shell 程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,Shell取第一个位置参数替换程序文件中的 $1,第二个替换 $2 , 依次类推。

$0 是一个特殊变量,它的内容是当前这个shell程序的文件名,所以 $0 不是一个位置参数。

$nn为数字,$0代表命令本身,$1-$9代表第一到第9个参数,十以上的参数需要用大括号包含,如${10}

$*代表命令行中所有的参数,把所有的参数看成一个整体。以"$1 $2 … $n"的形式输出所有参数

$@: 代表命令行中的所有参数,把每个参数区分对待。以"$1" "$2" … "$n" 的形式输出所有参数

$#: 代表命令行中所有参数的个数。添加到shell的参数个数

5.1 $* 和 $@的区别

  • 1$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以"$1" "$2" … "$n" 的形式输出所有参数;
  • 2,当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;
  • 3"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
  • 六、预定义变量

  • 预定义变量和环境变量相类似,也是在Shell一开始就定义的变量,不同的是,用户只能根据shell的定义来使用这些变量,所有预定义变量都是由符号“$”和另一个符号组成。 常见的Shell预定义变量有以下几种.
  • $? : 命令执行后返回的状态,0 表示没有错误,非0表示有错误。
  • $$ : 当前进程的进程号
  • $! : 后台运行的最后一个进程号
  • $0 : 当前执行的进程名

七、变量的算术运算

Shell中常见的算术运算符

Shell 中常见的算术运算命令

 7.1  双小括号 (())  数值运算命令的用法

 7.2 let 运算命令的用法

 let 赋值表达式  

 7.3 expr 命令的用法

expr 表达式     # 运算符号和数字之间要有空格

7.3.1 expr配合变量计算

expr在Shell中可配合变量进行计算,但需要用反引号将计算表达式括起来。

 7.3.2 利用 expr 计算字符串的长度

八、条件测试

8.1 条件测试语句

8.2 文件测试操作符

 注:(())不能用于文件测试,文件测试一般常用的是 [ ]

8.3 字符串测试操作符

 注: == !=  两端要有空格  ,(())不能用于字符测试

8.4 测试表达式 test 、[] 、[[]] 、 (()) 的区别

 九、if 条件判断语句

9.1 单条件语句

if 条件判断
then
    命令
fi

例子:

 

9.2 多条件语句

if 条件判断
then
    命令
elif 条件判断
then
    命令
fi

例子:

十、case条件判断语句

case 变量 in
    one)
        命令
;;
    two)
        命令
;;
    *)
        命令
esac

 例子:

效果展示:

十一、for循环语句

for 条件
do   
    命令
done

11.1 例子:计算指定数值之内的和

效果展示:

11.2 例子:区别$*和$@

效果展示:

 十二、while循环语句

while 条件
do
    命令
done

例子:

效果展示:

 十三、shell函数

13.1 语法格式

function name(){
    statements
    [return values]
 }

对各个部分的说明:

  • function是 Shell 中的关键字,专门用来定义函数;
  • name是函数名;
  • statements是函数要执行的代码,也就是一组语句;
  • return value表示函数的返回值,其中 return 是 Shell 关键字,
  • 专门用在函数中返回一个值;这一部分可以写也可以不写。

如果你嫌麻烦,函数定义时也可以不写 function 关键字

如果写了 function 关键字,也可以省略函数名后面的小括号

例子:

效果展示:

 

 

 

 

 

 

 

 

 

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

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

相关文章

[一篇读懂]C语言三讲:选择、循环

[一篇读懂]C语言三讲:选择、循环1. 选择if-else讲解1 关系表达式与逻辑表达式计算表达式的过程2 if-else语句【例】判断输入值是否大于02. 循环while,for讲解,continue,break讲解1 while循环【例】计算1到100之间所有整数之和2 fo…

【MySQL进阶】B+树索引的使用

【MySQL进阶】B树索引的使用 文章目录【MySQL进阶】B树索引的使用一、索引的代价二、B树索引适用的条件1、全值匹配2、匹配左边的列3、匹配列前缀4、匹配范围值5、精确匹配某一列并范围匹配另外一列6、用于排序7、用于分组三、回表的代价1、回表的代价2、覆盖索引四、如何挑选索…

论文管理系统(登录功能)

目录 一、后端部分 1.1 实体类 1.2 UserMapper类 1.3 Service层 接口 实现类 1.4 controller层 1.5 拦截器 二、前端部分 效果图 源码如下 代码讲解 准备工作和数据库都已经准备好了,接下来我们来写登录功能,登录功能我们通过mybatisplus来码写,所以不需要在UserMapper.…

台灯到底对眼睛好不好?2022精选眼科医生推荐护眼灯

台灯是我们最常见的照明工具了,台灯对眼睛会有一定的伤害的,光对人的视觉会产生一些影响的,选择质量过关的护眼台灯,对人的眼睛伤害是比较小的,基本上在光照进行优化,做到无可视频闪、无眩光等,…

巯基化PEG试剂——N3-PEG-SH,Azide-PEG-Thiol,叠氮-聚乙二醇-巯基

巯基化PEG化学试剂叠氮-聚乙二醇-巯基,其英文名为Azide-PEG-Thiol(N3-PEG-SH),它所属分类为Azide PEG Thiol PEG。 此peg试剂的分子量均可定制,有:5k N3-PEG-SH、20k 叠氮-聚乙二醇-巯基、10k N3-PEG-SH、…

[11]重绘与回流

在看今天的分享之前,希望大家先关注一下,因为你可以免费获取一枚前端路上的陪跑师。 什么是回流 回流:英文是reflow 当render tree中的一部分(或全部),因为元素的规模尺寸、布局、隐藏等改变 而需要重新构建,这就是回流…

基于web在线餐饮网站的设计与实现——蛋糕甜品店铺(HTML+CSS+JavaScript)

👨‍🎓静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计👩‍🎓,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等,用的最多的还是DW,当然不同软件写出的…

你的新进程是如何被内核调度执行到的?(上)

所谓的运行队列到底长什么样子、新进程是如何被加入进来的、调度是如何选择一个新进程的、新进程又如何被切换到 CPU 上运行的,这些细节咱们都没提到。今天就来展开看看这些进程运行背后的原理。 通过今天的文章,你将对以下两个问题有个更深入的理解。 …

mysql高手进阶优化篇

​MySql理论 逻辑架构 连接层-->服务层-->引擎层-->存储层 存储引擎 查看方式 1.查看mysql现在提供的搜索引擎--->show engines 2.查看mysql当前默认存储引擎show variables like storageenginestorage_enginestorageengine 存储引擎对比 MyISAM: BTree叶节…

Vue快速入门二:Vue绑定事件、Vue中的this指向、增加class选择器、动态创建标签

Vue定义点击事件&#xff1a; <body><div id"box"><button click"handleChange()">change</button></div><script>var vm new Vue({el:"#box",//定义方法methods:{//handleChange:function(){}//简写法&a…

数据结构:单链表

用&#xff08;带头节点&#xff09;单链表完成图书统计。节点结构包括书籍编号&#xff0c;书籍名以及对应作者。功能包括增加&#xff08;尾插法和指定位置插入法&#xff09;、删除、修改、查看。 一、定义节点结构 每一个节点都包括这些变量&#xff0c;构造器复杂将传入的…

去除 Zotero + Obsidian 复制粘贴参考文献表时的多余空行(ctrl+shift+C)

前言 最近在用 Zotero 做文献管理&#xff0c;用 Obsidian 记笔记。但是使用的时候&#xff0c;有一个问题不大&#xff0c;但是有时候很烦人的情况&#xff1a;粘贴参考文献格式。在粘贴的时候总会莫名多出来几个空行&#xff0c;需要手动删除。 举个例子&#xff1a; 下面…

蚂蚁链牵头两项区块链国际标准在ITU成功立项

近日&#xff0c;国际电信联盟第十六研究组&#xff08;简称ITU-T SG16&#xff09;召开全体会议。会上&#xff0c;由蚂蚁链牵头的两项区块链国际标准获得立项通过。包括&#xff1a; ITU-T H.DLT-SCLMR “Smart contract lifecycle management requirements for distributed…

Arduino开发实例-PS/2键盘驱动

PS/2键盘驱动 1、PS/2通信协议介绍 物理 PS/2 端口是 6 针 DIN 连接器。 连接器引脚如下所示: Vcc/Ground 为设备提供电源 (5V),而 Data 和 Clock 是两条集电极开路线,带有上拉电阻到 Vcc。 电阻值并不重要(1 – 10 KOhm),最小值给出最短的上升时间,而较大的值允许更少…

AES简写

一、简介引入 密码学中的高级加密标准&#xff08;Advanced Encryption Standard&#xff0c;AES&#xff09;&#xff0c;又称Rijndael加密法&#xff0c;是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES&#xff08;Data Encryption Standard&#xff0…

kingdee漏洞存在多个安全漏洞(通用管理账号+获得数据库密码+远程代码执行)

kingdee漏洞详情,金蝶eas存在通用管理账号获得数据库密码漏洞&#xff0c;金蝶apusic存在远程代码执行漏洞。 下面的信息希望乌云在确认漏洞予以模糊处理&#xff0c;以免对厂商和用户产生不良影响&#xff1a; 漏洞一、金蝶eas系统存在一个默认的管理员账号admr&#xff0c;密…

vBox+K8s坑记录

vBoxKubernetesFlannelDashboard一、VBox虚拟机IP地址重复问题1、通过导入ova系统镜像2、复制同一个镜像导致IP重复&#xff0c;无法拉取镜像复制多个系统镜像后&#xff0c;修改IP地址curl无效&#xff08;注同时启动两个及以上&#xff0c;会出现该问题&#xff09;导致拉取镜…

JVM堆内存泄露分析

一、背景 公司有一个中间的系统A可以对接多个后端业务系统B&#xff0c;一个业务系统以一个Namespace代表, Namespace中包含多个FrameChannel(用holder保存)&#xff0c;表示A连接到业务系统B各服务实例的连接&#xff1b;A与B通过GRPC通信。 二、现象 测试使用一台服务实例A&…

立创EDA仿真入门2 实战全桥整流

立创EDA仿真入门2 实战全桥整流一、全桥整流原理二、操作步骤1. 在立创EDA新建仿真项目和原理图2. 绘制原理图电阻的作用函数发生器的设置3. 点仿真4. 使用电容代替电阻5. 加上负载一、全桥整流原理 全桥整流也称整流桥堆&#xff0c;使用4个或更多相同的二极管组成整流电路&am…

四、MySQL 提权方式

1 UDF 提权 secure_file_priv 是用来限制 load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限 show global variables like secure%; 修改 my.cnf 文件,在 [mysqld] 块下,如果没有 secure_file_priv 则新增 指定目录:secure_file_pri…