linux-shell脚本

  • shell的编码语法

shell脚本的第一行内容是: #!/bin/bash,这句话相当于是一个导包语句,将shell的执行环境引入进去了。

shell中变量的命名要求:
只能使用数字、字母和下划线,且不能以数字开头
变量赋值是通过"="进行赋值,在变量、等号和值之间不能出现空格!

有两种写法:$name(简化写法)、${name}

如果我们想在变量的结果后面直接无缝拼接其它字符串,那就只能使用带花括号的形式

变量分为四类

本地变量:本地变量就只在当前shell脚本中有效。
环境变量:临时环境变量(export VAR_NAME=VALUE),/etc/profile(永久生效)
位置变量:类似于java传参

执行结果

[root@bigdata01 shell]# sh location.sh abc xyz

location.sh
abc
xyz


特殊变量:$?、$#

$?:它表示是上一条命令的返回状态码,状态码在0~255之间

状态码 描述
0 命令成功结束
1 通用未知错误

127 没找到命令
128 无效退出参数
128+x Linux信号x的严重错误

130 命令通过Ctrl+C控制码越界

255 退出码越界

$#:它表示的是shell脚本所有参数的个数 

引号+变量的使用

首先是单引号 ' ' 单引号不解析变量

[root@bigdata01 shell]# name=jack
[root@bigdata01 shell]# echo '$name'
$name


然后再看一下双引号," ":双引号解析变量

[root@bigdata01 shell]# name=jack

[root@bigdata01 shell]# echo "$name"

jack 


反引号``

[root@bigdata01 shell]# name=jack

[root@bigdata01 shell]# echo `$name`

-bash: jack: command not found 


反引号是执行并引用命令的执行结果,在这里反引号是获取到了name变量的值,然后去执行这个值,结果发现没有找到这个命令。如果我们把name的值改为pwd,来看一下效果,这样就会执行pwd,并且把pwd执行的结果打印出来。

[root@bigdata01 shell]# name=pwd
[root@bigdata01 shell]# echo `$name`
/root/shell


反引号还有另一种写法,$()  效果一致

如果我想打印  'pwd',外面有个单引号

[root@bigdata01 shell]# echo "'$name'"
'pwd'

逻辑运算符:

for循环:

for((i=0;i<10;i++))
do
循环体...
done

 do也可以和for写在一行,只是需要加一个分号;

for((i=0;i<10;i++));do
循环体...
done

 for...in 写法

for i in 1 2 3
do
循环体...
done

while循环:

while 测试条件
do
循环体...
done

测试条件:整型:-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)、-eq(等于)、-ne(不等于) 

#!/bin/bash
while test 2 -gt 1
do
echo yes
sleep 1
done

还有一种写法(个人比较喜欢)

#!/bin/bash
while [ 2 -gt 1 ]
do
echo yes
sleep 1
done 

#!/bin/bash
while [ "abc" = "abc" ]

do

echo yes

sleep 1

done 

if 分支语句: 

 #!/bin/bash
flag=$1
if [ $flag -eq 1 ]
then
echo one
fi

双分支

#!/bin/bash

#用户没有传入参数
if [ $# -lt 1 ]
then
 echo "not found param"

 exit 100

fi

#读取第一个参数
flag=$1
if [ $flag -eq 1 ]
then
 echo "one"
else
 echo "not support"

fi 

还可以类似于Java的else if

#!/bin/bash
if [ $# -lt 1 ]

   exit 100
fi


flag=$1
if [ $flag -eq 1 ]
then
 echo "one"
elif [ $flag -eq 2 ]

then

 echo "two"

elif [ $flag -eq 3 ]

then

 echo "three"

else

 echo "not support"

fi

  • shell 的执行

1、bash abc.sh

2、sh abc.sh

3、加上文件执行权限,chmod u+x abc.sh 

# 一个综合案例

nohup hello.sh >/dev/null 2>&1 &

# 解析

nohup和&:可以让程序一直在后台运行
/dev/null:是linux中的黑洞,任何数据扔进去都找不到了
>/dev/null:把标准输出重定向到黑洞中,表示脚本的输出信息不需要存储
2>&1 :表示是把标准错误输出重定向到标准输出中,标准输出可以使用文件描述符1来表示,标准错误输出可以使用文件描述符2来表示

  • shell 的调试 如:bash -x hello.sh

1、-x:启用调试模式。在此模式下,Bash 会逐行执行脚本,并打印出每一行命令及其执行结果。

2、假设脚本如下

#!/bin/bash
name="World"
echo "Hello, $name!"

3、执行结果,打印出每一行命令及其执行结果。

+ name=World
+ echo 'Hello, World!'
Hello, World! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18417.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费deepseek的API获取教程及将API接入word或WPS中

免费deepseek的API获取教程: 1 https://cloud.siliconflow.cn/中注册时填写邀请码&#xff1a;GAejkK6X即可获取2000 万 Tokens; 2 按照图中步骤进行操作 将API接入word或WPS中 1 打开一个word&#xff0c;文件-选项-自定义功能区-勾选开发工具-左侧的信任中心-信任中心设置…

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式 解决按键扫描&#xff0c;松手检测时阻塞的问题实现LED闪烁的非阻塞总结补充&#xff08;为什么不会阻塞&#xff09; 参考江协科技 KEY1和KEY2两者独立控制互不影响 阻塞&#xff1a;如果按下按键不松手&#xff0c;程序就…

Mybatisplus——Mybatisplus3.5.2版本使用Page分页插件查询,records有数据但是total显示0

目录 一、问题背景 debug 执行Mybatisplus使用Page分页插件查询时&#xff0c;发现 Page 里面的records有数据但是total显示0。 二、问题产生的原因 未配置MybatisPlus的分页插件拦截器导致的或者因mybatis-plus版本3.4或3.5版本导致原先的分页插件paginationInterceptor无法…

Windows安装 WSL2、Ubuntu 、docker(详细步骤 , 弃用 docker desktop )

前言 在现代软件开发领域&#xff0c;容器化技术已经成为提升应用部署效率和环境一致性的关键手段。Docker 作为一款卓越且被广泛应用的容器化平台&#xff0c;凭借其独特的技术架构&#xff0c;允许开发者将应用程序及其所需的全部依赖项&#xff0c;完整地打包进一个高度可移…

移动端测试的挑战与解决方案:兼容性、网络问题及实战策略

引言 移动应用已成为用户触达服务的核心入口,但移动端测试面临设备多样性、网络波动、用户场景复杂等多重挑战。据Statista统计,2023年全球活跃移动设备超180亿台,操作系统(Android/iOS)版本碎片化率超30%,这对测试工程师提出了极高要求。本文深度解析移动端测试的核心痛…

kron积计算mask类别矩阵

文章目录 1. 生成类别矩阵如下2. pytorch 代码3. 循环移动矩阵 1. 生成类别矩阵如下 2. pytorch 代码 import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0…

DeepSeek 概述与本地化部署【详细流程】

目录 一、引言 1.1 背景介绍 1.2 本地化部署的优势 二、deepseek概述 2.1 功能特点 2.2 核心优势 三、本地部署流程 3.1 版本选择 3.2 部署过程 3.2.1 下载Ollama 3.2.2 安装Ollama 3.2.3 选择 r1 模型 3.2.4 选择版本 3.2.5 本地运行deepseek模型 3.3.6 查看…

foobar2000设置DSP使用教程及软件推荐

foobar2000安卓中文版&#xff1a;一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式&#xff0c;包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐&#xff0c;foobar2000都能完美播放。除此之…

制作一个项目用于研究elementUI的源码

需求&#xff1a;修改el-tooltip的颜色&#xff0c;发现传递参数等方法都不太好用&#xff0c;也可以使用打断点的方式&#xff0c;但也有点麻烦&#xff0c;因此打算直接修改源码&#xff0c;把组件逻辑给修改了 第一步下载源码 源码地址 GitHub - ElemeFE/element: A Vue.j…

DDoS技术解析

这里是Themberfue 今天我们不聊别的&#xff0c;我们聊聊著名的网络攻击手段之一的 DDoS&#xff0c;看看其背后的技术细节。 DoS 了解 DDoS 前&#xff0c;先来讲讲 DoS 是什么&#xff0c;此 DoS 而不是 DOS 操作系统啊。1996年9月6日&#xff0c;世界第三古老的网络服务提供…

【学习资源】时间序列数据分析方法(1)

时间序列数据分析是一个有趣的话题&#xff0c;让我们多花一些时间来研究。此篇为第一篇文章。主要介绍特征提取方法、深度学习时序数据分析模型、参考资源。期望能帮助大家解决工业领域的相关问题。 1 特征提取方法&#xff1a;信号处理 (来源:INTELLIGENT FAULT DIAGNOSIS A…

0基础学LabVIEW

对于零基础的朋友来说&#xff0c;学习LabVIEW需要一个科学的学习路径和方法。通过观看优质的B站教程打好基础&#xff0c;再结合实际项目进行实践操作&#xff0c;能够快速提升LabVIEW的应用能力。以下是从入门到进阶的学习建议。 ​ 一、利用B站入门教程打基础 筛选优质教程…

微软AutoGen高级功能——Selector Group Chat

介绍 大家好&#xff0c;这次给大家分享的内容是微软AutoGen框架的高级功能Selector Group Chat(选择器群聊)&#xff0c;"选择器群聊"我在给大家分享的这篇博文的代码中有所体现微软AutoGen介绍——Custom Agents创建自己的Agents-CSDN博客&#xff0c;但是并没有详…

高通推出骁龙游戏超级分辨率™:充分释放移动游戏性能,带来更持久的续航

Snapdragon Elite Gaming 一直致力于为每位用户打造卓越游戏体验。骁龙支持众多端游级特性&#xff0c;包括144FPS游戏体验、True 10-bit HDR支持的最高视觉质量的超流畅图形&#xff0c;让玩家可以畅享超10亿色的游戏体验。骁龙将许多移动端首创特性引入备受玩家喜爱的游戏中&…

HCIA项目实践--RIP的拓展配置

9.4.7 RIP的拓展配置 &#xff08;1&#xff09;RIPV2的手工认证 RIPv2 的手工认证是增强网络安全性的手段。管理员手动配置密钥&#xff0c;路由器在收发 RIPv2 路由更新消息时&#xff0c;会对消息中的认证信息进行检查。发送方添加密钥&#xff0c;接收方用预设密钥验证。若…

Jenkins 配置 Git Repository 五

Jenkins 配置 Git Repository 五 这里包含了 Freestyle project 任务类型 和 Pipeline 任务类型 关于 Git 仓库的配置&#xff0c;如下 不同的任务类型&#xff0c;只是在不同的模块找到 配置 Git 仓库 找到 Git 仓库配置位置之后&#xff0c;所有的任务类型配置都是一样的 …

Python + WhisperX:解锁语音识别的高效新姿势

大家好&#xff0c;我是烤鸭&#xff1a; 最近在尝试做视频的质量分析&#xff0c;打算利用asr针对声音判断是否有人声&#xff0c;以及识别出来的文本进行进一步操作。asr看了几个开源的&#xff0c;最终选择了openai的whisper&#xff0c;后来发现性能不行&#xff0c;又换了…

红队视角出发的k8s敏感信息收集——持久化存储与数据泄露

在Kubernetes集群中&#xff0c;持久化存储卷如同数据的保险箱&#xff0c;承载着应用运行所必需的各类敏感信息。然而&#xff0c;从红队视角出发&#xff0c;这些存储卷也可能成为攻击者觊觎的目标。通过巧妙地利用配置不当或已知漏洞&#xff0c;攻击者能够从中收集到包括密…

微信服务号推送消息

这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户

[Spring] Spring常见面试题

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…