当前位置: 首页 > news >正文

【Linux】- 一文秒懂shell编程

shell编程

    • 1.1 Shell 是什么
    • 1.2 Shell 脚本的执行方式
    • 1.3 编写第一个 Shell 脚本
    • 2.1 Shell 的变量
    • 2.2 shell 变量的定义
    • 2.3 设置环境变量
    • 3.1 位置参数变量
    • 3.2 预定义变量
    • 4.1 运算符
    • 4.2 条件判断
    • 5.1 流程控制
    • 5.2 case 语句
    • 5.3 for 循环
    • 5.4 while 循环
    • 5.5 read基本语法
    • 6.1函数
    • 6.2 系统函数
    • 6.3 自定义函数

1.1 Shell 是什么

Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以
用 Shell 来启动、挂起、停止甚至是编写一些程序。

1.2 Shell 脚本的执行方式

  1. 脚本以#!/bin/bash 开头
  2. 脚本需要有可执行权限

1.3 编写第一个 Shell 脚本

 需求说明:创建一个 Shell 脚本,输出 hello world!
vim hello.sh
#!/bin/bash
echo “hello,world~”

脚本的常用执行方式
 方式 1(输入脚本的绝对路径或相对路径)
说明:首先要赋予 helloworld.sh 脚本的+x 权限, 再执行脚本
比如 ./hello.sh 或者使用绝对路径 /root/shcode/hello.sh
 方式 2(sh+脚本)
说明:不用赋予脚本+x 权限,直接执行即可。
比如 sh hello.sh , 也可以使用绝对路径
在这里插入图片描述

在这里插入图片描述

可以看到这个.sh文件在没有添加可执行权限时,即使是root用户也无法执行

在这里插入图片描述

也可以使用绝对路径的方式来输出

在这里插入图片描述

也可以不添加可执行权限,使用 sh+.sh文件名 来执行shell文件

在这里插入图片描述

2.1 Shell 的变量

Shell 变量介绍

  1. Linux Shell 中的变量分为,系统变量和用户自定义变量。
  2. 系统变量:HOME、$PWD、$SHELL、$USER 等等,比如: echo $HOME 等等…
  3. 显示当前 shell 中所有变量:set

shell 变量的定义
 基本语法

  1. 定义变量:变量名=值

  2. 撤销变量:unset 变量

  3. 声明静态变量:readonly 变量,注意:不能 unset
     快速入门

  4. 案例 1:定义变量 A
    在这里插入图片描述

  5. 案例 2:撤销变量 A

  6. 案例 3:声明静态的变量 B=2,不能 unset

在这里插入图片描述

运行

在这里插入图片描述

2.2 shell 变量的定义

 定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写, 这是一个规范,我们遵守即可
     将命令的返回值赋给变量
  4. A=`date`反引号,运行里面的命令,并把结果返回给变量 A
  5. A=$(date) 等价于反引号
    在这里插入图片描述
    在这里插入图片描述

2.3 设置环境变量

基本语法

  1. export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量/全局变量)
  2. source 配置文件 (功能描述:让修改后的配置信息立即生效)
  3. echo $变量名 (功能描述:查询环境变量的值)

设置tomcat的环境变量

在这里插入图片描述
在这里插入图片描述

案例演示:

  1. 在/etc/profile 文件中定义 TOMCAT_HOME 环境变量
  2. 查看环境变量 TOMCAT_HOME 的值
  3. 在另外一个 shell 程序中使用 TOMCAT_HOME
    注意:在输出 TOMCAT_HOME 环境变量前,需要让其生效
    source /etc/profile

在 /root/shellcode输出tomcat的全局变量

:<<!内容! 是多行注释

在这里插入图片描述
在这里插入图片描述

3.1 位置参数变量

介绍
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如 : ./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息
基本语法
$n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10} )
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)

案例:编写一个 shell 脚本 position.sh , 在脚本中获取到命令行的各个参数信息。
在这里插入图片描述

3.2 预定义变量

基本介绍
就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用

基本语法

  1. $$ (功能描述:当前进程的进程号(PID))
  2. $! (功能描述:后台运行的最后一个进程的进程号(PID))
  3. $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变
    量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

在这里插入图片描述
在这里插入图片描述

4.1 运算符

基本介绍
学习如何在 shell 中进行各种运算操作。
基本语法

  1. “$((运算式))”或“$[运算式]”或者 expr m + n //expression 表达式
  2. 注意 expr 运算符间要有空格, 如果希望将 expr 的结果赋给某个变量,使用 `` 3) expr m - n
  3. expr *, /, % 乘,除,取余
    operator.sh
    案例 1:计算(2+3)X4 的值
    案例 2:请求出命令行的两个参数[整数]的和 20 5

在这里插入图片描述
在这里插入图片描述

4.2 条件判断

判断语句
 基本语法
[ condition ](注意 condition 前后要有空格)
#非空返回 true,可使用$?验证(0 为 true,>1 为 false)
 应用实例
[ test ] 返回 true
[ ] 返回 false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
 判断语句
常用判断条件

  1. = 字符串比较

  2. 两个整数的比较
    -lt 小于
    -le 小于等于 (little equal)
    -eq 等于
    -gt 大于
    -ge 大于等于 (greater equal)
    -ne 不等于 (not equal)

  3. 按照文件权限进行判断
    -r 有读的权限
    -w 有写的权限
    -x 有执行的权限

  4. 按照文件类型进行判断
    -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录

 应用实例
案例 1:“ok"是否等于"ok” 判断语句:使用 =
案例 2:23 是否大于等于 22
判断语句:使用 -ge
案例 3:/root/shcode/aaa.txt 目录中的文件是否存在
判断语句: 使用 -f
在这里插入图片描述

运行结果

在这里插入图片描述

5.1 流程控制

if 判断
 基本语法
if [ 条件判断式 ]
then
代码
fi
或者 , 多分支

if [ 条件判断式 ]
then
代码
elif [条件判断式]
then
代码
fi
 注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格
 应用实例 ifCase.sh
案例:请编写一个 shell 程序,如果输入的参数,大于等于 60,则输出 “及格了”,如果小于 60,则输出 “不及格”
在这里插入图片描述
在这里插入图片描述

5.2 case 语句

 基本语法
case $变量名 in
“值 1”)
如果变量的值等于值 1,则执行程序 1
;;“值 2”)
如果变量的值等于值 2,则执行程序 2
;;…省略其他分支…

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

案例 1 :当命令行参数是 1 时,输出 “周一”, 是 2 时,就输出"周二", 其它情况输出 “other”

在这里插入图片描述
在这里插入图片描述

5.3 for 循环

 基本语法 1
for 变量 in 值 1 值 2 值 3…
do
程序/代码
done
应用实例 testFor1.sh
案例 1 :打印命令行输入的参数 [这里可以看出$* 和 $@ 的区别]
 基本语法 2
for (( 初始值;循环控制条件;变量变化 ))

do
程序/代码
done
在这里插入图片描述

在这里插入图片描述

 应用实例 testFor2.sh
案例 1 :从 1 加到 100 的值输出显示

在这里插入图片描述
在这里插入图片描述

5.4 while 循环

 基本语法 1
while [ 条件判断式 ]

do
程序 /代码
done
注意:while 和 [有空格,条件判断式和 [也有空格

案例 :从命令行输入一个数 n,统计从 1+…+ n 的值是多少?
在这里插入图片描述
在这里插入图片描述

5.5 read基本语法

read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
参数
变量:指定读取值的变量名

应用实例 testRead.sh
案例 1:读取控制台输入一个 NUM1 值
案例 2:读取控制台输入一个 NUM2 值,在 10 秒内输入。
代码:
#!/bin/bash
#案例 1:读取控制台输入一个 NUM1 值
read -p “请输入一个数 NUM1=” NUM1
echo “你输入的 NUM1=$NUM1”

#案例 2:读取控制台输入一个 NUM2 值,在 10 秒内输入。
read -t 10 -p “请输入一个数 NUM2=” NUM2
echo “你输入的 NUM2=$NUM2”
在这里插入图片描述

在这里插入图片描述

6.1函数

函数介绍
shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。

6.2 系统函数

 basename 基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串
显示出来。
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

 应用实例
案例 1:请返回 /home/aaa/test.txt 的 “test.txt” 部分
basename /home/aaa/test.txt
在这里插入图片描述

 dirname 基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩
下的路径(目录的部分))
 应用实例
案例 1:请返回 /home/aaa/test.txt 的 /home/aaa
dirname /home/aaa/test.txt
在这里插入图片描述

6.3 自定义函数

 基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

【Linux】- 一文秒懂shell编程

shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…...

CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决

CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决 虚拟机配置多个网络地址&#xff0c;结果同时只能有一个ip是通的&#xff0c; 原因&#xff1a;Linux默认开启了反向路由检查导致的&#xff0c;比如说外面访问eth0的网卡&#xff0c;而网关在eth1上&#xff0c;又或者从…...

关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法

具体 Vue 代码演示&#xff1a; test.vue 文件演示&#xff1a; <template> <!-- 方法一 --> <div>{{ test.data 0 ? 男 : 女}}</div><!-- 方法二 --> <div>{{ test.data 0 ? 男 : }}{{ test.data 1 ? 女 : }}{{ test.d…...

mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器

注意 mac 自带 openssl 所以没必要像 windows 一样先安装 openssl&#xff0c;直接生成即可 生成 ssl/自签名 证书 生成 key # 生成rsa私钥&#xff0c;des3算法&#xff0c;server_ssl.key是秘钥文件名 1024位强度 openssl genrsa -des3 -out server_ssl.key 1024让输入两…...

Unix System V BSD POSIX 究竟是什么?

学习Linux系统,很多同学对这些单词概念很模糊、一脸懵逼! 黄老师觉得,了解了历史,才会真正明白这些单词的含义,坐稳、黄老师发车了!!! 首先介绍一下什么是Unix? UNIX(非复用信息和计算机服务,英语:Uniplexed Information and Computing Service,UnICS)取“UNI…...

数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式

文章目录 一、目标检测1.1 labelImg1.2 介绍1.3 安装1.4 使用1.5 转换1.6 验证 二、图像分割2.1 labelme2.2 介绍2.3 安装2.4 使用2.5 转换2.6 验证 一、目标检测 1.1 labelImg 1.2 介绍 labelImg是一个开源的图像标注工具&#xff0c;用于创建图像标注数据集。它提供了一个…...

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}

红黑树 一、红黑树的概念 红黑树&#xff08;Red Black Tree&#xff09; 是一种自平衡二叉查找树&#xff0c;在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有…...

获取对象占用内存

添加依赖 <dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.0.0</version> </dependency>添加vm启动参数 --add-opens java.base/java.langALL-UNNAMED --add-opens java.ba…...

mysql UUID 作为主键的问题

UUID 在MySQL中&#xff0c;可以使用UUID()函数来生成一个新的UUID值。该函数的返回值是一个字符串类型&#xff0c;表示一个32位的十六进制数字&#xff0c;其中包含4个连字符“-”&#xff0c;例如&#xff1a;“6ccd780c-baba-1026-9564-0040f4311e29”。 varchar(32) 32*4…...

2023高教社杯全国大学生数学建模竞赛选题建议

如下为C君的2023高教社杯全国大学生数学建模竞赛&#xff08;国赛&#xff09;选题建议&#xff0c; 提示&#xff1a;DS C君认为的难度&#xff1a;C<B<A&#xff0c;开放度&#xff1a;B<A<C 。 D、E题推荐选E题&#xff0c;后续会直接更新E论文和思路&#xf…...

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测 目录 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测分类效果基本介绍模型描述预测过程程序设计参考资料分类效果 基本介绍 MATLAB实现GRNN广义回归神经网络多特...

低功耗窗帘电机解决方案成功应用并通过 Matter 1.1 认证

Nordic Semiconductor官方宣布与HooRii Tech&#xff08;和众科技&#xff09;携手合作&#xff0c;基于 Nordic nRF52840 芯片平台打造的 HRN71模组&#xff0c;成功赋能低功耗窗帘电机品牌发布Matter产品。低功耗窗帘电机获得 Matter 1.1 认证意味着它具有与其他 Matter 认证…...

如何修复老照片?老照片修复翻新的方法

老旧照片&#xff0c;尤其是黑白照片&#xff0c;往往因为年代久远、保存方式不当等原因而出现褪色、污损、划痕等问题&#xff0c;会比较难以修复&#xff0c;就算是技术精湛的专业修复师&#xff0c;也是需要投入极大时间精力的&#xff0c;效果也是不可预料的。 修复老照片…...

MySQL:区分大小写

查看MySQL版本 show variables; 1、查看 MySQL 当前的区分大小写设置&#xff1a; SHOW VARIABLES LIKE lower_case_table_names; 或者 show Variables like %table_names 2、更改大小写敏感设置&#xff1a; 在 MySQL 5.7 中&#xff0c;更改大小写敏感设置要求修改配置文件 …...

刷题笔记19——优势洗牌和去重保持字典序

摆出无比亲密的态度&#xff0c;装模作样地与对方套近乎&#xff0c;频繁地联系对方。这都说明他们并不相信自己得到了对方的信赖&#xff0c;若是互相信赖&#xff0c;便不会依赖亲密的感觉。在外人看来&#xff0c;反而显得冷淡。 ——尼采《人性的&#xff0c;太人性的》 ha…...

星际争霸之小霸王之小蜜蜂(十一)--杀杀杀

系列文章目录 星际争霸之小霸王之小蜜蜂&#xff08;十&#xff09;--鼠道 星际争霸之小霸王之小蜜蜂&#xff08;九&#xff09;--狂鼠之灾 星际争霸之小霸王之小蜜蜂&#xff08;八&#xff09;--蓝皮鼠和大脸猫 星际争霸之小霸王之小蜜蜂&#xff08;七&#xff09;--消失…...

腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书

2023腾讯云免费SSL证书申请流程&#xff0c;一个腾讯云账号可以申请50张免费SSL证书&#xff0c;免费SSL证书为DV证书&#xff0c;仅支持单一域名&#xff0c;申请腾讯云免费SSL证书3分钟即可申请成功&#xff0c;免费SSL证书品牌为TrustAsia亚洲诚信&#xff0c;腾讯云百科分享…...

C#上位机开发目录

C#上位机序列1: 多线程&#xff08;线程同步&#xff0c;事件触发&#xff0c;信号量&#xff0c;互斥锁&#xff0c;共享内存&#xff0c;消息队列&#xff09; C#上位机序列2: 同步异步(async、await) C#上位机序列3: 流程控制&#xff08;串行&#xff0c;并行&#xff0c…...

网络通信基础

IP地址 使用ip地址来描述网络上一个设备所在的位置 端口号 区分一个主机上不同的程序,一个网络程序,在启动的时候,都需要绑定一个或者多个端口号,后续的通信过程都需要依赖端口号来进行展开的,mysql默认的端口号是3306 协议 描述了网络通信传输的数据的含义,表示一种约定,…...

框架分析(10)-SQLAlchemy

框架分析&#xff08;10&#xff09;-SQLAlchemy 专栏介绍SQLAlchemy特性分析ORM支持数据库适配器事务支持查询构建器数据库连接池事务管理器数据库迁移特性总结 优缺点优点强大的对象关系映射支持多种数据库灵活的查询语言自动管理数据库连接支持事务管理易于扩展和定制 缺点学…...

拉丝机在紧固件生产中的作用与工艺流程_6月FES上海紧固件展

2026第十六届上海紧固件专业展将于6月24日至26日在国家会展中心&#xff08;上海&#xff09;举行。本届展会由上海上搜展览与华人螺丝网联合打造&#xff0c;并获得行业权威机构支持&#xff0c;整体展出规模约70,000平方米&#xff0c;预计汇聚1,400余家参展企业和25,000名专…...

从Tcl脚本到实战:用Innovus自动化完成数字IC后端设计的5个高效技巧

从Tcl脚本到实战&#xff1a;用Innovus自动化完成数字IC后端设计的5个高效技巧 在数字IC后端设计领域&#xff0c;效率提升往往意味着项目周期的缩短和设计质量的提高。对于已经掌握Innovus基础操作的中级工程师而言&#xff0c;如何从手动点击界面过渡到自动化脚本驱动的工作流…...

避开这些坑!海康威视嵌入式HR面常见‘送命题’与应答策略(附真实案例)

海康威视嵌入式HR面试避坑指南&#xff1a;6类高频"送命题"拆解与实战话术 在技术岗位的招聘流程中&#xff0c;HR面试往往是最容易被轻视却暗藏最多陷阱的环节。许多嵌入式开发者在技术面表现出色&#xff0c;却在看似轻松的HR面中意外折戟。通过对海康威视近三年嵌…...

GHelper终极指南:华硕笔记本性能优化的完整解决方案

GHelper终极指南&#xff1a;华硕笔记本性能优化的完整解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址:…...

DeOldify处理超分辨率图像实战:应对大尺寸老照片的内存与计算挑战

DeOldify处理超分辨率图像实战&#xff1a;应对大尺寸老照片的内存与计算挑战 老照片修复&#xff0c;听起来是个挺有情怀的事儿。但当你真的拿到一张祖辈传下来的、扫描出来的超大尺寸老照片时&#xff0c;情怀可能瞬间就被现实浇灭了。动辄几千乘几千像素的扫描件&#xff0…...

RAGAS 0.2.4 + Ollama本地大模型:手把手教你生成高质量RAG测试数据集(含踩坑实录)

RAGAS 0.2.4与Ollama本地大模型实战&#xff1a;构建高可靠性RAG测试数据集的深度指南 当我们需要评估一个检索增强生成&#xff08;RAG&#xff09;系统的性能时&#xff0c;高质量的测试数据集是关键。然而&#xff0c;依赖云端大模型服务不仅成本高昂&#xff0c;还可能面临…...

GitHub自动化神器:用Cursor+Firecrawl实现项目自更新(避坑指南)

GitHub自动化神器&#xff1a;用CursorFirecrawl实现项目自更新&#xff08;避坑指南&#xff09; 在开源项目的日常维护中&#xff0c;重复性的更新工作往往消耗开发者大量精力。有没有一种方法&#xff0c;能让项目像拥有自我意识般自动完成内容搜集、代码生成甚至PR提交&am…...

【2024最硬核数据工程升级】:Polars 2.0清洗架构重构——支持10亿行/分钟实时清洗的4层缓冲设计

第一章&#xff1a;Polars 2.0大规模数据清洗技巧如何实现快速接入Polars 2.0 基于 Rust 构建&#xff0c;原生支持并行执行与零拷贝内存访问&#xff0c;在处理 TB 级结构化数据时展现出远超 Pandas 的吞吐能力。其 LazyFrame 模式可将整个清洗流程编译为优化的执行计划&#…...

雯雯的后宫-造相Z-Image-瑜伽女孩效果可解释性探索:Attention Map可视化体式关注区域

雯雯的后宫-造相Z-Image-瑜伽女孩效果可解释性探索&#xff1a;Attention Map可视化体式关注区域 你有没有想过&#xff0c;AI在画一张瑜伽女孩图片时&#xff0c;它到底在“看”什么&#xff1f;当我们输入“新月式瑜伽体式”时&#xff0c;模型是理解了“手臂向上延展”这个…...

ROS2效率提升:用rqt可视化工具替代复杂命令行的5个场景

ROS2效率革命&#xff1a;5个必须用rqt替代命令行的实战场景 第一次在ROS2项目中使用命令行调试参数时&#xff0c;我盯着满屏的ros2 param list和ros2 service call输出&#xff0c;突然意识到自己正在用21世纪的技术复刻80年代的操作方式。这就是rqt可视化工具存在的意义——…...