shell脚本基础
目录
前言
一、概述
(一)、shell脚本基础概念
(二)、shell的类型
二、Shell变量
(一)、组成
1.变量名
2.变量值
(二)、类型
1.系统内置变量(环境变量)
2.自定义变量
3.预定义变量
4.位置变量
5.作用域
6.shell中的字符串
三、运算符
(一)、数学运算
(二)、比较运算
1.逻辑运算符
2.条件测试
3.字符串比较
4.数值比较
5.文件比较
四、shell脚本
(一)、shell脚本编写规范
(二)、shell运行规则
(三)、shell脚本运行追踪
总结
前言
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学。
一、概述
(一)、shell脚本基础概念
脚本就是将手动一次性执行的命令进行规范且自动化
(二)、shell的类型
shell 命令解释环境
类型有
sh
ash
bsh
csh
bash
tcsh
dsh
zsh
在Linux系统中
文件名.sh .sh是linux下bash shell 的默认后缀
查看系统中支持的shell
cat /etc/shells
查看系统默认shell
echo $SHELL

二、Shell变量
(一)、组成
1.变量名
不会变化
声明规范
不能是数字或数字开头
以_或字母开头
变量名中不能包含特殊字符

声明方法
驼峰式 userName
双驼峰 UserName
shell写法
user_name
username
USERNAME
2.变量值
不断变化
数字、字符
(二)、类型
1.系统内置变量(环境变量)
这种变量中主要保存的是和系统操作环境相关的数据,一般对系统起作用的环境变量的变量名是系统预先设定好的。
env可在/etc/profile文件中修改

查看环境变量
echo $PATH
显示当前环境变量的值
echo $LANG

表示系统的默认语言环境为美式英语(English, United States)并使用UTF-8编码
查看当前的区域设置
locale


查看远程连接
echo $SSH_CONNECTION

2.自定义变量
这种变量是最常见的变量,由用户自由定义变量名和变量的值。
varName=varValue
等号两边不能有空格
字符串
shell中可以不使用引号
当包含有空格时,需要使用引号
引号的用法
| 不会引用变量值 | 单引号 ' |
| 会应用变量值 | 双引号 " |
| 引用命令结果 | 反撇号 ` |
| $(命令) | 应用场景较多 |
3.预定义变量
是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
| $0 | 脚本本身的名称 |
| $# | 脚本后参数的个数 |
| $* | 脚本运行时参数的内容(整体输出) |
| $@ | 脚本运行时参数的内容(逐个输出) |
| $? | 脚本运行完毕后的返回值 |
| 默认情况大 | 0 成功 |
| 非0 失败 |




一般情况下失败为1,特殊的失败
4.位置变量
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
脚本后参数所在的位置
$1
...
$9
5.作用域
输出 echo $varName
默认变量只在当前shell下生效
若要在当前及其子shell下生效,需要声明为全局变量(export)

6.shell中的字符串
string
1)获得字符串的长度
语法: ${#StringName}

2)字符串取子串
语法: ${#StringName:position:lenght}
注意:lenght没有定义时,一直取到字符串的结尾!

3)字符串的截取
a.从左至右截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName##*string}
b.从左至右截取第一个匹配字符串string之后的所有字符串
语法: ${StringName#*string}
c.从右至左截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName%%string*}
d.从右至左截取第一个匹配字符串string之后的所有字符串
语法: ${StringName%string*}

4)字符串的拼接
语法: StringName3=${StingName1}${StringName2}

5)字符串替换:
语法: ${StringName/OldString/NewString}

三、运算符
(一)、数学运算
| + - * / % | * 作为乘号时需要加转义符为\* |
| 运算方法 | |
| expr | expr $a + $b |
| $((a+b)) | echo $((a+b)) |
| $[a+b] | echo $[a+b] |
| 注意 | shell不支持浮点数的显示 |
| \r | 回车符 |
| \d | 垂直制表符 |
| \v | 水平制表符 |


(二)、比较运算
1.数值比较
| -eq | 等于 |
| -ne | 不等于 |
| -lt | 小于 |
| -le | 小于等于 |
| -gt | 大于 |
| -ge | 大于等于 |
用test测试

2.文件比较
| -e | 文件或目录是否存在 |
| -f | 是否为文件 |
| -d | 是否为目录 |
| -r | 判断文件是否可读 |
| -w | 判断文件是否可写 |
| -x | 判断文件是否可执行 |


3.字符串比较
| = | 字符串一致 |
| != | 字符串不一致 |
| -z | 字符串为空 |
| ! -z | 字符串不为空 |

4.逻辑运算符
| && | 并且,有假则假,全真为真 | |
| || | 或者,有真则真,全假为假 | |
| ! | 取反 | 有真则假,有假则真 |


5.条件测试
| && | [ $a -ne $b ] && echo OK | 条件 && 输出结果 |
| 条件为真输出 | ||
| || | [ $a -ne $b ] || echo OK | 条件 || 输出结果 |
| 条件为假输出 |
四、shell脚本
(一)、shell脚本编写规范
| 第一行 | #!/bin/bash |
| 第二行 | #脚本的说明 |
| 第三行 | 脚本正文 |
(二)、shell运行规则
| 没有x权限 | bash 脚本所在路径/脚本文件 |
| source 脚本所在路径/脚本文件 | |
| .(点)脚本所在路径/脚本文件 | |
| 有x权限 | .(点)/脚本文件 |
| 脚本绝对路径/脚本文件 |


不打断会一直查看
(三)、shell脚本运行追踪
shell脚本运行追踪bash -x 脚本所在路径/脚本文件
$[$RANDOM%100]返回100内随机数
seq 1 10返回1到10 的连续数字
{1..10}返回1到10 的连续数字
seq 1.1 10.1返回1.1 2.1 3.1.... 10.1


read -p "提示语" 变量名读取键盘输入并赋值给变量名



总结
今天的任务量有些重,但知识点是看懂和编辑Shell脚本的基础,需要花费时间进行反复背记,加油吧!
相关文章:
shell脚本基础
目录 前言 一、概述 (一)、shell脚本基础概念 (二)、shell的类型 二、Shell变量 (一)、组成 1.变量名 2.变量值 (二)、类型 1.系统内置变量(环境变量) 2.自定…...
创建maven的Springboot项目出现错误:Cannot access alimaven
创建maven的Springboot项目出现错误:Cannot access alimaven 1)问题2) 分析问题3)解决问题 1)问题 创建maven的Springboot项目出现错误: Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/p…...
神经网络基础-神经网络补充概念-32-神经网络与大脑
概念 神经网络(Neural Networks)是受到生物神经系统启发而设计的机器学习模型,用于处理和学习复杂的数据模式。尽管神经网络的设计和工作原理与大脑有一些相似之处,但它们并不完全相同,以下是神经网络和大脑之间的一些…...
linux自动填充密码及提示信息
背景:需要自动创建nvc的登录密码 sudo apt-get install expect expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互…...
IC设计中主要的EDA工具有哪些? (内附EDA虚拟机安装资源)
EDA工具的使用涵盖了芯片的功能设计、综合、验证、物理设计等环节,更是被称作“芯片设计的工作母机”。下面就来为大家具体介绍一下常见的EDA工具。(需要EDA虚拟机安装资源文末可领取~) 什么是EDA? EDA是电子设计自动化…...
Zabbix配置通用的TCP/IP:port监控项
我们经常的用接口,比如说FTP、HTTP、DNS、数据库接口,都可以用IP:PORT方式探测其是否存活,那么我们去繁就简,就简单监控一下IP:PORT吧! 1、新建主机: 填入主机名称、群组、Agent可以不填&…...
【RocketMQ】SpringBoot集成RocketMQ
SpringBoot集成RocketMQ 首先依旧是引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>然后就可以编写发送不同类…...
思腾云计算
思腾合力受邀参加第七届世界智能大会,届时在会上展出思腾合力 AI 服务器。诚挚邀请与会者来思腾展位(S10-B04)参观与交流,领取七彩虹电竞机械键盘与鼠标、正版NVIDIA信仰尺、公牛魔方智能USB插座、超大桌面鼠标垫等精美礼品。 由天…...
前端面试:【HTML】语义化标签、表单、媒体元素
HTML(超文本标记语言)是构建网页内容的基础,它通过一系列标签来描述页面的结构和内容。在这篇文章中,我们将探讨HTML的基础知识,包括语义化标签、表单和媒体元素。 语义化标签:赋予内容更多意义 语义化标签…...
2024浙大MBA/MEM/MPA四个月冲刺备考策略
近期收到很多考生的咨询:距离联考就仅剩四个多月的时间,这个管理类联考的难度如何?主要考些什么内容?现在才开始备考还有希望上岸浙大吗?是不是要等到明年在开始备考比较合适?那么今天在这里小立老师就跟大…...
Element通过v-for循环渲染的form表单校验
需求:有个表单信息是v-for渲染的,例如下图,通过循环遍历实现新增和删除模块,按照平时的写法实现校验,是不能实现我们想要的效果,根据这个需求,我找到了一个解决方法 1.HTML <el-form ref&qu…...
精彩回顾 | 迪捷软件出席2023ATC汽车电子与软件技术周
2023年8月18日,由ATC汽车技术会议主办,上海市集成电路行业协会支持的“2023ATC汽车电子与软件技术周”在上海市圆满落幕。迪捷软件上海参展之行圆满收官。 ▲开幕式 本次峰会汇聚了整车厂、汽车零部件集团、软硬件方案提供商、软件工具供应商、软件测试…...
树莓派的自启动与桌面应用程序
目录 1 打开终端自启动 .bashrc 2 触发时机较早的开机自启动rc.local 3 桌面应用程序 4 触发时机较晚的的开机自启动 autostart 1 打开终端自启动 .bashrc .bashrc的程序也可以在开机时进行自启动,但是每一次打开终端时同样会运行一遍,所以只需…...
RabbitMQ面试题
1. 什么是MQ MQ 就是消息队列。是软件和软件进行通信的中间件产品 2. MQ的优点 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量…...
Kubernetes二进制部署方案
目录 一、环境准备 2.1、主机配置 2.2、安装 Docker 2.3、生成通信加密证书 2.3.1、生成 CA 证书(所有主机操作) 2.3.2、生成 Server 证书(所有主机) 2.3.3、生成 admin 证书(所有主机) 2.3.4、生成 proxy 证书 三、部署 …...
Android 13 开启关闭飞行模式
一.背景 由于客户定制的Settings里面需要开启和关闭飞行模式,所以需要实现此功能。 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能_android 自动开启无障碍服务_龚礼鹏的博客…...
C++学习笔记总结练习:EffectiveSTL
文章目录 使用STL库的55条建议1.慎重选择容器的类型2.不要试图编写独立于容器的代码3.确定容器中的对象拷贝正确且高效4.调用empty判断是否为空,而不是size5.区间成员函数优于与之对应单元素成员函数6.如果容器中包含了通过new操作创建的指针,切记在容器…...
SQL Developer中的Data Redaction
SQL Developer中的Data Redaction用起来比命令行方便多了。可以选定表或视图,右键点击“遮盖保护”菜单。 但赋权方面有需要注意的地方。 假设Redact Admin是SYS,Redact User是HR。虽然SYS具备所有权限,但还是报以下错误。其实这个错误是针…...
深入解析Ed25519椭圆曲线数字签名算法的C#移植及应用示例
第一部分:Ed25519算法的简介与重要性 随着数字加密技术的飞速发展,我们不断地探索更安全、更高效的加密算法来保护数据和身份验证。其中,Ed25519已经成为了椭圆曲线数字签名算法(ECDSA)的一个重要分支,其在…...
XQuery创建BaseX数据库实例
XQuery创建BaseX数据库实例 文章目录 XQuery创建BaseX数据库实例1、准备工作2、demo目录结构3、IDEA配置BaseX4、工具类BaseXClient5、Example 1、准备工作 开发工具: IDEAOxygen 技术: JavaBaseXXpathXquery BaseX需要阅读的文档: htt…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
