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

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

微信小程序 - 手机震动

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

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...