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

【Linux常用命令15】shell脚本

shell概述:shell是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核

Linux Shell 种类非常多, 常见的有: Bourne Shell (/usr/bin/sh 或/bin/sh)、 Bourne Again Shell (/bin/bash)、 C Shell (/usr/bin/csh)、 K Shell (/usr/bin/ksh)、 Shell for Root (/sbin/sh) 等。

脚本格式

#!/bin/bash     #表示定义该脚本是一个 shell 脚本(固定格式) 。
#This is my First shell     #说明一下这个脚本是做什么的

执行方式

  • sh 或 bash + 相对或绝对的文件路径(脚本文件不需要 +x执行权限)
  • 直接输入脚本的相对或绝对路径(需授予执行权限 +x)
  • 在脚本的路径前面,使用一个 . 或一个source

shell变量: Shell 变量分为系统变量和自定义变量。系统变量有 H O M E 、 HOME、 HOMEPWD、$USER等,变量名可以由字母、数字、下划线组成,不能以数字开头。

基本语法

  • 定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
  • 删除变量:unset 变量名 。
  • 声明静态变量:readonly 变量名,静态变量不能unset。
  • 使用变量:$变量名。

将命令返回值赋给变量(重点)

  • A=ls 反引号,执行里面的命令
  • A=$(ls) 等价于反引号

shell环境变量定义

基本语法

  • export 变量名=变量值,将 Shell 变量输出为环境变量。
  • source 配置文件路径,让修改后的配置信息立即生效。
  • echo $变量名,检查环境变量是否生效

位置参数变量基本语法

  • $n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
  • $* :命令行中所有参数,且把所有参数看成一个整体。
  • $@ :命令行中所有参数,且把每个参数区分对待。
  • $# :所有参数个数。
#示例 编写 Shell 脚本 xuexi.sh ,输出命令行输入的各个参数信息。
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
#输出各个参数
echo $0 $1 $2 
echo $* 
echo $@ 
echo 参数个数=$#
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 10 20 30
xuexi.sh 10 20
10 20 30
10 20 30
参数个数=3

预定义变量基本语法

  • $$ :当前进程的 PID 进程号。
  • $! :后台运行的最后一个进程的 PID 进程号。
  • $? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。
#示例 编写 Shell 脚本 学习.sh ,输出命令行输入的各个参数信息。
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
echo 当前的进程号=$$ 
# &:以后台的方式运行程序 
sh hello.sh & 
echo 最后一个进程的进程号=$! 
echo 最后执行的命令结果=$?
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat hello.sh 
#!/bin/bash
echo hello world
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
当前的进程号=11190
最后一个进程的进程号=11191
最后执行的命令结果=0
[root@izb1j05w8ldmtn1ylavvdfz dabao]# hello world

运算符基本语法

  • $((运算式)) 或 $[运算式]
  • expr m + n 注意 expr 运算符间要有空格
  • expr m - n
  • expr *,/,% 分别代表乘,除,取余
# 第1种方式 $(())  
[root@izb1j05w8ldmtn1ylavvdfz dabao]# echo $(((2+3)*4)) 
20
# 第2种方式 $[],推荐  
[root@izb1j05w8ldmtn1ylavvdfz dabao]# echo $[(2+3)*4]
20
# 使用 expr 
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
#使用expr计算
TEMP=`expr 2 + 3` 
echo `expr $TEMP \* 4`
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
20

if 条件语句

#基本语法
if [ 条件判断式 ];then   程序   
fi
# 或者(推荐)
if [ 条件判断式 ]
then程序
elif [ 条件判断式 ]
then程序
fi
#示例1,测试数字大小
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
#测试数字大小
NUM=100
if (( $NUM > 4 )) ;then
echo “this num is $NUM greater 4 ! ”
fi
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
“this num is 100 greater 4 ! ”
#示例2,测试文件是否存在,不存在则创建
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
#测试文件是否存在
if [ ! -e /data/dabao/hello.txt ];then
touch /data/dabao/hello.txt
else
echo “This hello.txt is exist,Please exit ….. ”
fi
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
[root@izb1j05w8ldmtn1ylavvdfz dabao]# ls -lrt
-rw-r--r-- 1 root root         0 Mar 13 16:36 hello.txt
#再次执行
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
“This hello.txt is exist,Please exit ….. ”
#示例3,多个条件进行判断
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
scores=80
if [[ $scores -gt 85 ]]; then
echo "very good!";
elif [[ $scores -gt 75 ]]; then
echo "good!";
elif [[ $scores -gt 60 ]]; then
echo "pass!";
else
echo "no pass!"
fi
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
good!
逻辑运算符解析:
-f 判断文件是否存在 eg: if [ -f filename ]
-d 判断目录是否存在 eg: if [ -d dir ]
-eq 等于 应用于:整型比较
-ne 不等于 应用于:整型比较
-lt 小于 应用于:整型比较
-gt 大于 应用于:整型比较
-le 小于或等于 应用于:整型比较
-ge 大于或等于 应用于:整型比较
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式
-z 空字符

for 循环

基本语法
for 变量名 in 值1 值2 值3...
do程序
done
#示例1,打印 seq 数字循环
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
for i in `seq 15`
do
echo “NUM is $i”
done
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
“NUM is 1”
“NUM is 2”
“NUM is 3”
“NUM is 4”
“NUM is 5”
“NUM is 6”
“NUM is 7”
“NUM is 8”
“NUM is 9”
“NUM is 10”
“NUM is 11”
“NUM is 12”
“NUM is 13”
“NUM is 14”
“NUM is 15”

while 循环

基本语法
while [ 条件判断式 ]
do程序
done
#示例1,判断数字
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
i=1
while [[ $i -lt 10 ]];do
echo $i
((i++))
done
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
1
2
3
4
5
6
7
8
9

case 分支

基本语法
case $变量名 in
"值1")
如果变量值等于值1,则执行此处程序1
;;
"值2")
如果变量值等于值2,则执行此处程序2
;;
...省略其它分支...
*)
如果变量值不等于以上列出的值,则执行此处程序
;;
esac
#示例1,当命令行参数为1时输出“周一”,2时输出“周二”,3时输出“周三”,4时输出“周四”,5时输出“周五”,其他情况输出“周末”。
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
case $1 in
"1")
echo 周一
;;
"2")
echo 周二
;;
"3")
echo 周三
;;
"4")
echo 周四
;;
"5")
echo 周五
;;
*)
echo 周末
;;
esac
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 3
周三
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh
周末

函数

基本语法
function 函数名(){
语句
........
}
#示例
[root@izb1j05w8ldmtn1ylavvdfz dabao]# cat xuexi.sh 
#!/bin/bash
function name(){
echo "my name is chatgpt"
}
name
[root@izb1j05w8ldmtn1ylavvdfz dabao]# sh xuexi.sh 
my name is chatgpt

相关文章:

【Linux常用命令15】shell脚本

shell概述:shell是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核 Linux Shell 种类非常多, 常见的有: Bourne Shell (/usr/bin/sh 或/bin/sh)、 Bourne Again Shell (/bin/bash)、 C Shell (/us…...

LTE系统TDD无线帧结构特点

LTE系统TDD无线帧结构的特点主要表现在以下几个方面: 无线帧结构时间描述的最小单位是采样周期Ts。在LTE中,每个子载波为2048阶IFFT采样,△f15kHz,因此采样周期Ts1/(204815000)0.033us。 TDD的帧结构包括两个5ms的半帧&#xff0…...

微信小程序OA会议系统数据交互

前言 经过我们所写的上一文章:微信小程序会议OA系统其他页面-CSDN博客 在我们的是基础面板上面,可以看到出来我们的数据是死数据,今天我们就完善我们的是数据 后台 在我们去完成项目之前我们要把我们的项目后台准备好资源我放在我资源中&…...

TypeScript环境安装

一、windows环境 安装node,附带自动安装npm工具 安装tsc npm install -g typescript 对于不支持 Nuget 的项目类型,你可以使用 TypeScript Visual Studio 扩展。 你可以使用 Visual Studio 中的 Extensions > Manage Extensions 安装扩展。 安装下…...

连接Mumu模拟器使用ADB

要连接Mumu模拟器使用ADB,您可以按照以下详细步骤进行操作: 安装ADB驱动程序:在您的计算机上安装ADB驱动程序。ADB是Android Debug Bridge的缩写,它允许您与Android设备进行通信。您可以从Android开发者网站(https://d…...

springboot缓存篇之mybatis一级缓存和二级缓存

前言 相信很多人都用过mybatis,这篇文章主要是介绍mybatis的缓存,了解一下mybatis缓存是如何实现,以及它在实际中的应用 一级缓存 什么是mybatis一级缓存?我们先看一个例子: GetMapping("/list") public…...

云计算认证有哪些?认证考了有什么用?

云计算作为一项快速发展的技术,对人才的需求持续增长。无论是男生还是女生,只要具备相关的技能和知识,都可以在云计算领域找到就业机会。 目前入行云计算最好最便捷的方式就是考证,拿到一个云计算相关的证书,就能开启…...

[ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹

本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【云计算洞察】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | …...

c语言练习91:合并两个有序链表

合并两个有序链表 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 代码1: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct Li…...

【Qt控件之QTabBar】介绍及使用

概述 QTabBar类提供了一个选项卡栏,例如用于选项卡对话框。 QTabBar非常简单易用,它使用预定义的形状绘制选项卡,并在选择选项卡时发出信号。它可以被子类化以调整外观和感觉。Qt还提供了一个实现好的QTabWidget。 每个选项卡具有一个tabT…...

最新Tuxera NTFS2023最新版Mac读写NTFS磁盘工具 更新详情介绍

Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下,MacOSX只能实现对NTFS的读取功能,Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2023完美兼容最新版本的MacOS 11 Big Sur,在M1芯片…...

AndroidX使用Paho MQTT报找不到android/support/v4/content/LocalBroadcastManager

网上有直接引用support-v4包的,但我用的AndroidX,不能为这个类再引用support-v4 直接自己创建这个类,把androidx.localbroadcastmanager.content.LocalBroadcastManager改改就行。 虽然奇葩但能解决问题 package android.support.v4.content…...

Filter与Listener(过滤器与监听器)

1.Filter 1.过滤器概述 过滤器——Filter,它是JavaWeb三大组件之一。另外两个是Servlet和Listener 它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作 在程序中访问服务器资源时,当一个请求到来,服务器首…...

【刷题篇】反转链表

文章目录 一、206.反转链表二、92.反转链表 ||三、25. K 个一组翻转链表 一、206.反转链表 class Solution { public://使用头插//三个指针也可以ListNode* reverseList(ListNode* head) {if(headnullptr)return nullptr;ListNode* curhead;ListNode* newheadnew ListNode(0);L…...

【C语言小游戏--猜数字】

文章目录 前言1.游戏描述2.代码实现2.1打印菜单2.2构建基础框架2.3玩游戏2.3.1生成随机数2.3.1.1rand()2.3.1.2srand()2.3.1.3time() 2.3.2game() 2.4自己设定猜的次数 3.完整代码 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏,下…...

Vue计算属性computed和监听watch

1.计算属性 初衷:为了解决模块里面有太多的计算逻辑让模版难以维护。 计算属性可以依赖一个数据也可以依赖多个数据的变化 使用场景: 商品单价和数量改变时,商品总价更改。如果写在方法里面,那么每次修改商品单价和数量时都会…...

HTTP介绍 原理 消息结构 客户端请求 服务器响应 HTTP状态码

一、HTTP介绍二、HTTP工作原理HTTP三点注意事项 三、HTTP消息结构四、客户端请求消息五、服务器响应消息HTTP请求方法 七、HTTP响应头信息八、HTTP状态码(HTTP Status Code)下面是常见的HTTP状态码:HTTP状态码分类HTTP状态码列表 一、HTTP介绍…...

linux性能分析(五)如何学习linux性能优化

一 如何学习linux性能优化 强调: 由于知识记忆曲线以及某些知识点不常用,所以一定要注重复习思考: 如何进行能力转义以及能力嫁接? --> 真正站在巨人的肩膀上性能调优的目的: 不影响系统稳定性的资源最大利用化补充: 性能…...

1402. 做菜顺序 --力扣 --JAVA

题目 一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是 time[i…...

Springboot踩坑-request body重复读问题

背景 在一次业务开发中,由于需要在拦截器中对一个http请求中request body内容做解析和判断,所以用了httpServletRequest的getInputStream解析了request body内容,之后导致了拦截器处理成功后,原来的业务接口处报request body not…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...