当前位置: 首页 > 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…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

xmind转换为markdown

文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

JS红宝书笔记 - 3.3 变量

要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...

CTF show 数学不及格

拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 ​ 根据题目…...