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

Linux之Shell编程(1)

文章目录

  • 前言
  • 一、Shell是什么
  • 二、Shell脚本的执行方式
    • 脚本的常用执行方式
  • 三、Shell的变量
    • Shell变量介绍
    • shell变量的定义
  • 四、设置环境变量
    • 基本语法
    • 快速入门
  • 五、位置参数变量
    • 介绍
    • ●基本语法
    • ●位置参数变量
  • 六、预定义变量
    • 基本介绍
    • 基本语法
  • 七、运算符
    • 基本介绍
    • 基本语法


前言

为什么要学习Shell编程
1.Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
2对于JavaE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
3.对于大数据程序员来说,需要编写Shell程序来管理集群。


一、Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

在这里插入图片描述

二、Shell脚本的执行方式

脚本格式要求
1.脚本以#!/bin/bash开头
2.脚本需要有可执行权限
●编写第一个Shell脚本
需求说明:创建一个Shell脚本,输出hello world!

#!/bin/bash
echo "hello,word"
chmod u+x shcode.sh  添加可执行权限

脚本的常用执行方式

方式1(输入脚本的绝对路径或相对路径)
说明:首先要赋予helloworld.sh脚本的+x权限,再执行脚本
方式2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。

三、Shell的变量

Shell变量介绍

  1. Linux Shell中的变量分为,系统变量和用户自定义变量。
  2. 系统变量:$HOME、$PWD、$SHELL、$USER等等,比如: echo $HOME 等等.
  3. 显示当前shell中所有变量:set

shell变量的定义

基本语法
1.定义变量:变量=值
2撤销变量:unset变量
3.声明静态变量:readonly变量,注意:不能unset
快速入门
#!/ bin/ bash
#案例1:定义变量AA=100
#输出变量需要加上$

echo A=$A
echo "A=$A"

#案例2:撤销变量A

unset A
echo "A=$A"

#案例3:声明静态的变量B=2,不能unset

readonly B=2
echo "B=$B"
unset B 添加这句,会提示出错

定义变量的规则
1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
2.等号两侧不能有空格
3.变量名称一般习惯为大写,这是一个规范,我们遵守即可
将命令的返回值赋给变量
1.A=date反引号,运行里面的命令,并把结果返回给变量A
2. A=$(date)等价于反引号

四、设置环境变量

基本语法

  1. export 变量名=变量值(功能描述:将shell变量输出为环境变量/全局变量)
  2. source 配置文件(功能描述:让修改后的配置信息立即生效)
  3. echo $变量名(功能描述:查询环境变量的值)

快速入门

1.在/etc/profile文件中定义TOMCAT_HOME环境变量

export TOMCAT_HOME=/opt/tomcat

在这里插入图片描述

2.查看环境变量TOMCAT_HOME的值

source /opt/tomcat
echo $TOMCAT_HOME

3.在另外一个shell程序中使用TOMCAT_HOME

echo "tomcat=$TOMCAT HOME"

注意:在输出TOMCAT_HOME 环境变量前,需要让其生效source /etc/profile

附Shell脚本的多行注释

 :<<! 内容!

在这里插入图片描述

五、位置参数变量

介绍

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如:./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息

●基本语法

List item

$n(功能描述:n为数字,$0代表命令本身,$1- $9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

$*(功能描述:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体)

$ @(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

$#(功能描述:这个变量代表命令行中所有参数的个数)

●位置参数变量

案例:编写一个shell脚本position.sh,在脚本中获取到命令行的各个参数信息。

echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数的个数=$#"

在这里插入图片描述

六、预定义变量

基本介绍

就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

基本语法

$$(功能描述:当前进程的进程号(PID) )
$!(功能描述:后台运行的最后一个进程的进程号(PID) )
$ ?(功能描述∶最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
应用实例
在一个shell脚本中简单使用一下预定义变量preVar.sh

#!/bin/bash
echo "当前执行的进程id=$$"
#以后台方式运行一个脚本,获取他的进程号
/root/shcode.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"

在这里插入图片描述

七、运算符

基本介绍

学习如何在shell中进行各种算操作。

基本语法

1.“$((运算式))”或“$[运算式]”或者expr m +n
2.注意expr运算符间要有空格
3. expr m - n
4.expr *.1.% 乘,除,取余
应用实例
案例1:计算(2+3)X4的值

#!/bin/bash
RES=$(((2+3)*4))
echo "res=$RES"

#使用第二种方式,推荐使用

RES2=$[(2+3)*4]
echo " res2=$RES2"
#使用第三种方式expr 
TEMP=` expr 2 +.3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "res4=$RES4"

#案例2:请求出命令行的两个参数[整数]的和20 50

SUM=$[$1+$2]
echo "sum=$SUM"

相关文章:

Linux之Shell编程(1)

文章目录前言一、Shell是什么二、Shell脚本的执行方式脚本的常用执行方式三、Shell的变量Shell变量介绍shell变量的定义四、设置环境变量基本语法快速入门五、位置参数变量介绍●基本语法●位置参数变量六、预定义变量基本介绍基本语法七、运算符基本介绍基本语法前言 为什么要…...

Java问题诊断工具——JVisualVM

这篇文章源自一次加班改bug的惨痛经历[,,_,,]:3负责的一个项目占用不断增加&#xff0c;差点搞崩服务器(╥﹏╥)……一下子有点懵&#xff0c;不能立刻确定是哪里导致的问题&#xff0c;所以决定好好研究下这个之前一直被我忽视的问题诊断工具&#x1f527;——JVisualVM嘿嘿我…...

Python3实现简单的车牌检测

导语Hi&#xff0c;好久不见~~~两周没写东西了&#xff0c;从简单的开始&#xff0c;慢慢提高文章水准吧&#xff0c;下一个月开始时间就会比较充裕了~~~利用Python实现简单的车牌检测算法~~~让我们愉快地开始吧~~~相关文件网盘下载链接: https://pan.baidu.com/s/1iJmXCheJoWq…...

基于支持向量机SVM多因子测量误差预测,支持向量机MATLAB代码编程实现

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 SVM应用实例&#xff0c;SVM的测量误差预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机&#xff08;support vector machines, SVM&#xff09;是一种二分类模型&#xff0c;它的基本模型是定义在特…...

新农具时代,拼多多的进击与本分

这几年&#xff0c;乡村振兴被频频提及&#xff0c;核心就是经济振兴。但经济振兴&#xff0c;不能只靠政府&#xff0c;更要靠企业&#xff0c;政府引导、企业主导才能真正让农民、农村、农业长期受益。企业中&#xff0c;被寄予厚望的是电商企业。甚至&#xff0c;电商成为了…...

质量工具之故障树分析FTA(2) - FTA的基本概念

关键词&#xff1a;问题解决、故障树、故障树分析、FTA、可靠性、鱼骨图、根本原因分析 前文我们已经详细介绍了FTA的历史。 我们在工作中碰到一个问题&#xff0c;可以利用的问题解决工具有很多&#xff0c;故障树分析FTA就是其中之一。 但是FTA毕竟是相对复杂较难掌握的工具…...

《高质量C/C++编程》读书笔记二

文章目录前言三、命名规则四、表达式和基本语句if语句循环语句五、常量前言 这本书是林锐博士写的关于C/C编程规范的一本书&#xff0c;我打算写下一系列读书笔记&#xff0c;当然我并不打算全盘接收这本书中的内容。   良好的编程习惯&#xff0c;规范的编程风格可以提高代码…...

常用的美颜滤镜sdk算法

本文主要介绍常见的美颜滤镜SDK算法&#xff0c;包括 SRGB、 HSL、 Lab、 JPEG、 TIFF等。本文不会过多介绍算法原理&#xff0c;只是列举一些在实际项目中用到的滤镜效果&#xff0c;如&#xff1a; 1.色彩空间变换 2.颜色范围调节 3.色彩平衡调节 4.灰度级调节 5.色相/饱和度…...

动态SQL必知必会

动态SQL必知必会1、什么是动态SQL2、为什么使用动态SQL3、动态SQL的标签4、if 标签-单标签判断5、choose标签-多条件分支判断6、set 标签-修改语句7、foreach标签7.1 批量查询7.2 批量删除7.3 批量添加8、模糊分页查询1、什么是动态SQL 动态 SQL 是 MyBatis 的强大特性之一。如…...

DML编程控制

id生成策略 模型类: Data TableName("tbl_user") public class User {TableId(type IdType.AUTO)TableId(type IdType.NONE)TableId(type IdType.INPUT)TableId(type IdType.ASSIGN_ID)TableId(type IdType.ASSIGN_UUID)private Long id;private String name;T…...

关于肺结节实时的目标检测

目录 1. 对屏幕固定区域的检测 1.1 代码 1.2 结果展示 2. video 检测 2.1 代码 2.2 展示...

利用 Rainbond 云原生平台简化 Kubernetes 业务问题排查

Kubernetes 已经成为了云原生时代基础设施的事实标准&#xff0c;越来越多的应用系统在 Kubernetes 环境中运行。Kubernetes 已经依靠其强大的自动化运维能力解决了业务系统的大多数运行维护问题&#xff0c;然而还是要有一些状况是需要运维人员去手动处理的。那么和传统运维相…...

C++中的future和promise使用方法

future和promise C11中std::future提供了一种访问异步操作结果的机制。异步操作不能马上就获取操作结果&#xff0c;只能在未来某个时候获取&#xff0c;但可以以同步等待的方式来获取结果&#xff0c;可以通过查询future的状态&#xff08;future_status&#xff09;来获取异…...

Vue项目创建

一.Axios简介 1、Axios是什么&#xff1f; Axios是一个基于promise的HTTP库&#xff0c;类似于jQuery的ajax&#xff0c;用于http请求。可以应用于浏览器端和node.js&#xff0c;既可以用于客户端&#xff0c;也可以用于node.js编写的服务端 安装使用 1.下载axios npm inst…...

2 Vue组件化编程

2.1. 模块与组件、模块化与组件化 模块 理解&#xff1a;向外提供特定功能的 js 程序&#xff0c;一般就是一个 js 文件为什么&#xff1a;js 文件很多很复杂作用&#xff1a;复用、简化 js 的编写&#xff0c;提高 js 运行效率 组件 定义&#xff1a;用来实现局部功能的代码…...

使用GPT-4生成QT代码

一、概述最近ChatGPT火爆起来了&#xff0c;ChatGPT是一种基于GPT的自然语言处理模型&#xff0c;可以用于生成自然语言文本&#xff0c;例如对话、文章等。最近又发现了一个优秀且免费的代码生成工具Cursor.so &#xff0c;Cursor.so集成了 GPT-4 &#xff0c;可以帮助你快速编…...

Golang每日一练(leetDay0013)

目录 37. 解数独 Sudoku Solver &#x1f31f;&#x1f31f;&#x1f31f; 38. 外观数列 Count and Say &#x1f31f;&#x1f31f; 39. 组合总和 Combination Sum &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Py…...

7个Python中的隐藏小技巧分享

Python 是每个程序员都喜欢的语言&#xff0c;因为它易于编码和易于阅读的语法。但是&#xff0c;你知道 python 有一些很酷的技巧可以用来让事情变得更简单吗&#xff1f;在今天的内容中&#xff0c;我将与你分享7 个你可能从未使用过的Python 技巧前言Python 是每个程序员都喜…...

学习系统编程No.8【bash实现】

引言&#xff1a; 北京时间&#xff1a;2023/3/22/6:59&#xff0c;一晃3月都要过去了&#xff0c;时间真快&#xff0c;我都不知道自己这个月是怎么过的呢&#xff1f;怎么就要结束了&#xff0c;难受&#xff0c;恍惚自己还在2022年&#xff0c;刚刚晨跑回来&#xff0c;洗完…...

2023年顶级编程语言趋势

对于开发人员和软件工程师来说&#xff0c;选择更优秀的编程语言使编写可以在任何地方运行的软件变得更加容易&#xff0c;工作效率更高。从 Java 的缓慢衰落到 MATLAB 的惊人流行&#xff0c;对当今最流行的编程语言的分析&#xff0c;可以帮助你了解最新趋势并响应最新趋势。…...

网络安全之认识勒索病毒

一、什么是勒索病毒 勒索病毒&#xff0c;是一种新型电脑病毒&#xff0c;伴随数字货币兴起&#xff0c;主要以邮件、程序木马、网页挂马、服务器入侵、捆绑软件等多种形式进行传播&#xff0c;一旦感染将给用户带来无法估量的损失。如果遭受勒索病毒攻击&#xff0c;将会使绝…...

C语言手撕一个Hash表(HashTable)

什么是Hash Table 散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;由数组演化而来。可以说&#xff0c;如果没有数组&#xff0c;就没有散列表。 散列函数 散列函数是将我们想插入的节点散列成一个数值的函数。它…...

代码随想录第二十七天(669、108、538、回溯算法介绍)

669. 修剪二叉搜索树 不能简单地通过递归实现代码&#xff0c;比如&#xff1a; class Solution { public:TreeNode* trimBST(TreeNode* root, int low, int high) {if (root nullptr || root->val < low || root->val > high) return nullptr;root->left t…...

【Leetcode】设计循环队列

目录 【Leetcode622】设计循环队列 A.链接 B.题目再现 C.解法 【Leetcode622】设计循环队列 A.链接 设计循环队列 B.题目再现 C.解法 其实这题用数组或是链表都能解决&#xff0c;但是如果是用链表的话&#xff0c;那么队列为空的条件和队列满了的条件是一样的&#xff0…...

【Linux】浅谈shell命令以及运行原理

前言&#xff1a;上篇博文把linux下的基本指令讲解完了。本期我们聊聊Linux下【shell】命令及其运行原理。 目录 Shell的基本概念与作用 原理图展示 shell命令执行原理 Shell的基本概念与作用 Linux严格意义上说的是一个操作系统&#xff0c;我们称之为“核心&#xff08;ker…...

【shell脚本】nginx服务管理及存活检测脚本实战

前言 今天终于敢说自己是csdn万粉博主了&#xff0c;感谢大家的厚爱&#xff0c;我会继续输出更多优质的好文章&#xff0c;一起学习。 座右铭&#xff1a; 先努力让自己发光&#xff0c;再帮助更多的人。 &#x1f3e0; 个人主页&#xff1a;我是沐风晓月 &#x1f9d1; 个人…...

web服务器—nginx

一、nginx介绍Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。和apache一样&#xff0c;都是web服务器软件&#xff0c;因为其性能优异&#xff0c;所以被广大运维喜欢。又因…...

网络安全工具大合集

还是一句话&#xff0c;功夫再高&#xff0c;也怕菜刀首先&#xff0c;恭喜你发现了宝藏。本文章集成了全网优秀的开源攻防武器项目&#xff0c;包含&#xff1a;信息收集工具&#xff08;自动化利用工具、资产发现工具、目录扫描工具、子域名收集工具、指纹识别工具、端口扫描…...

什么是SHA256?比特币是如何应用SHA256算法的?

SHA 256算法是一种具有确定性的单向哈希函数 算法是执行操作的一系列步骤或过程 哈希函数是种数学函数&#xff0c;输入的长度任意&#xff0c;但是输出长度固定&#xff0c;可以理解为文件的数字指纹&#xff0c;同一个输入值&#xff0c;总是得相同的输出 SHA256&#xff0…...

JDK20正式发布了GA版本,短期维护支持,以及JDK21预览

最近&#xff0c;Oracle发布了JDK20&#xff0c;相比对于Java开发者来说&#xff0c;JDK的发版是比较收关注的事情了&#xff0c;小简也来和大家一起了解了解JDK20发生了什么变化呢&#xff1f; 首先&#xff0c;JDK20是一个短周期版本&#xff0c;有6个月的维护时间&#xff0…...