【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、 HOME、PWD、$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的半帧࿰…...
微信小程序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…...
革命性AI工具gptcommit:让GPT-3为你自动编写完美的Git提交信息
革命性AI工具gptcommit:让GPT-3为你自动编写完美的Git提交信息 【免费下载链接】gptcommit A git prepare-commit-msg hook for authoring commit messages with GPT-3. 项目地址: https://gitcode.com/gh_mirrors/gp/gptcommit 在软件开发过程中,…...
【SpringBoot】微信扫码登录极速指南:5分钟搞定个人网站认证,免企业资质!
1. 为什么个人开发者需要微信扫码登录? 很多个人开发者搭建博客或小型网站时,都会遇到一个头疼的问题:用户登录系统怎么做?传统的账号密码注册流程繁琐,用户容易流失。而第三方登录中,微信扫码无疑是体验最…...
03、对比串口、以太网,解析汽车为何首选 CAN 总线
001、通信基石:串口、以太网与CAN总线技术概览与对比引言 凌晨三点,实验室的示波器还亮着。我盯着屏幕上那串时有时无的UART数据,咖啡已经凉透——某个传感器的数据包每隔十几分钟就丢一帧,产线测试组明天一早就要报告。这种问题太典型了:线缆长了点,环境干扰大了点,波…...
如何完整解锁Cursor Pro功能:一键激活与无限使用的终极指南
如何完整解锁Cursor Pro功能:一键激活与无限使用的终极指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached you…...
Xamarin开发者必看:用CommunityToolkit.Mvvm简化跨平台移动开发(支持iOS/Android全版本)
Xamarin开发者必看:用CommunityToolkit.Mvvm简化跨平台移动开发(支持iOS/Android全版本) 在跨平台移动开发领域,Xamarin一直以其原生性能和代码共享优势占据重要地位。然而,随着项目规模扩大,传统的MVVM实现…...
Python新手必看:5分钟搞定BMI计算器(附完整代码及format函数详解)
Python新手实战:从零构建BMI计算器与字符串格式化深度解析 在编程学习的起步阶段,能够快速实现一个看得见、用得着的小工具,往往比学习抽象概念更能激发持续学习的动力。BMI(身体质量指数)计算器就是一个绝佳的练手项目…...
打破画布边界:为什么 AI 实时绘画正成为线下品牌营销与亲子互动的“新标配”?
AI 实时绘画已从“画完等待出图”的照片冲洗模式进化为“边画边变”的魔法镜子模式,显著提升亲子参与感与品牌记忆度。搜狐AILab“绘光织影”将延迟压缩至约 200ms、帧率达 20fps,并通过即画即印闭环,实现亲子参与时长与二次互动率双提升。 -…...
终极免费解决方案:RDPWrap实现Windows远程桌面多用户连接完整指南
终极免费解决方案:RDPWrap实现Windows远程桌面多用户连接完整指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否曾经因为Windows远程桌面只能单用户连接而感到困扰?是否希望家庭多设…...
Apollo Client 终极指南:从零构建宝可梦图鉴应用的完整教程
Apollo Client 终极指南:从零构建宝可梦图鉴应用的完整教程 【免费下载链接】learnapollo 👩🏻🏫 Learn Apollo - A hands-on tutorial for Apollo GraphQL Client (created by Graphcool) 项目地址: https://gitcode.com/gh_…...
【稀缺首发】SITS2026圆桌闭门纪要:全球仅12家机构获准验证的多模态推理新范式(含3项未公开Benchmark数据)
第一章:SITS2026圆桌:多模态大模型未来趋势 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026圆桌论坛中,来自Meta、DeepMind、中科院自动化所与上海AI Lab的七位首席科学家共同指出:多模态大模型正从“跨模态对齐”迈向…...
