Linux-初学者系列7_shell编程

news2024/11/29 6:32:09

在进行服务器集群管理时,需要编写shell程序来进行服务器管理。

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

一、shell脚本的执行方式

1、脚本格式要求

脚本以#!/bin/bash开头

#!/bin/bash

在这里插入图片描述

脚本需要有可执行权限

2、脚本常用执行方式

01-输入脚本的绝对路径或相对路径

要赋予脚本的+x权限,再执行脚本。

在这里插入图片描述

02-sh+脚本

不用赋予脚本+x权限,直接执行。

在这里插入图片描述

二、shell变量

1、变量介绍

Linux shell中的变量分为:系统变量和用户自定义变量。

01-系统变量
[root@bogon shcode]# echo $HOME
/root
[root@bogon shcode]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@bogon shcode]# echo $PWD
/root/shcode

显示当前shell中所有变量

set

在这里插入图片描述

在这里插入图片描述

02-shell变量的定义
1)基本语法

定义变量

变量名=值
[root@bogon shcode]# vim var.sh
#!/bin/bash
#定义变量A
A=100
#输出变量需要加上$
echo A=$A
[root@bogon shcode]# chmod u+x var.sh
[root@bogon shcode]# ll
总用量 8
-rw-r--r--. 1 root root 30 5月   7 10:52 hello.sh
-rwxr--r--. 1 root root 70 5月   7 11:17 var.sh
[root@bogon shcode]# ./var.sh
A=100

撤销变量

unset 变量

在这里插入图片描述

声明静态变量

readonly变量

注:不能unset。

在这里插入图片描述

小知识:

如果要找到第15行,显示行号

:nu

在这里插入图片描述

2)定义变量的规则
  • 变量名称可以由字母、数字、下划线组成,但是不能数字开头

    例如:5A=200(x)

  • 等号两侧不能由空格

  • 变量名称一般为大写

将命令的返回值赋给变量

反引号:运行里面的命令,并把结果返回给变量A
A=`zhang`
A=$(zhang)

在这里插入图片描述

三、设置环境变量

1、基本语法

export 变量名=变量值
//将shell变量输出为环境变量/全局变量

在这里插入图片描述

source 配置文件
//修改后的配置信息立即生效

在这里插入图片描述

echo $变量名
//查询环境变量的值

在这里插入图片描述

shell脚本的多行注释
:<<! 内容!

在这里插入图片描述

四、位置参数变量

在执行shell脚本时,如果希望获取到命令行的参数信息,可以使用到位置参数变量。

./myshell.sh 100 200

这就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息。

基本语法

语法描述
$nn为数字
$0代表命令本身, 1 − 9 代表第一到第九个参数,十以上的参数需要用大括号包含: 1-9代表第一到第九个参数,十以上的参数需要用大括号包含: 19代表第一到第九个参数,十以上的参数需要用大括号包含:{10}
$*命令行中所有的参数,$*把所有的参数看成一个整体
$@代表命令行中所有的参数,不过$@把每个参数区分对待
$#代表命令行中所有参数的个体

在这里插入图片描述

五、预定义变量

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

基本语法

语法描述
$$当前进程的进程号PID
$!后台运行的最后一个进程的进程号PID
$?最后一次执行的命令的返回状态。
如果这个变量的值为0,证明上一个命令正确执行
如果这个变量的值为非0(具体数字,由命令自己来决定),则证明上一个命令执行不正确。

在这里插入图片描述

六、运算符

在shell中进行各种运算操作。

1、基本语法

01-第一种方式
"$((运算式))"

在这里插入图片描述

02-第二种方式
"$[运算式]"

在这里插入图片描述

03-第三种方式
expr m + n

expr运算符中间要有空格。

如果希望expr的结果赋给某个变量,使用反引号``。

expr \*,/,%
乘,除,取余

在这里插入图片描述

练习

在这里插入图片描述

七、条件判断

1、基本语法

#condition前后要有空格
[ condition ] 
#非空返回true,可以使用$?验证(0为true,>1为false)

2、判断语句

常用判断条件

01-字符串比较
=
02-两个整数的比较
语句描述
-lt小于
-le小于等于
-eq等于
-gt大于
-ge大于等于
-ne不等于
03-按照文件权限进行判断
语法描述
-r读的权限
-w写的权限
-x执行的权限
练习

在这里插入图片描述

3、流程控制

01 if判断

基本语法

if [ 条件判断式 ]
then
  代码
fi
if [ 条件判断式 ]
then
  代码
elif [ 条件判断式 ]
then
  代码
fi

注:[ 条件判断式 ],中括号和条件判断式之间必须有空格。

02 case语句

基本语法

case $变量名 in
"值1")
如果变量的值等于值1,则会执行程序1
;;
"值2")
如果变量的值等于值2,则会执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则会执行此程序
;;
esac

在这里插入图片描述

03 for循环

基本语法1

for 变量 in 值1 值2 值3...
do
程序
done

在这里插入图片描述

基本语法2

for ((初始值;循环控制条件;变量变化))
do
程序
done

在这里插入图片描述

04 while循环

基本语法

while [ 条件判断式 ]
do
程序
done

在这里插入图片描述

八、read读取控制台输入

基本语法
read(选项)(参数)

选项

选项描述
-p指定读取值时的提示符
-t指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

参数

变量:指定读取值的变量名

示例:

在这里插入图片描述

在这里插入图片描述

九、函数

shell编程和其他编程语言一样,有系统函数,也可以自定义函数。

1、系统函数

01 basename基本语法

返回完整路径最后/的部分,常用于获取文件名。

basename [pathname] [suffix]

用于获取文件名(不包括路径)。其中,pathname 表示要处理的文件路径,suffix 表示要从文件名中删除的后缀。

例如:

以下命令来获取该文件的文件名:

如果我们想要删除 .txt 后缀,可以使用以下命令

在这里插入图片描述

02 dirname基本语法

用于获取文件路径(不包括文件名)。

dirname [pathname]

pathname 表示要处理的文件路径。

在这里插入图片描述

2、自定义函数

基本语法
[function] funname[()]
{
  Action;
  [return int]
}
调用函数名:funname [值]

function 用于声明一个函数,函数名可以任意取名。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单记录一下spi的四种mode

0 前言 最近在学习SPI&#xff0c;刚开始接触四种mode的时候&#xff0c;还有点懵&#xff0c;也是搜了好几个博客&#xff0c;才算搞懂&#xff0c;特此记录下&#xff0c;防止下次又要翻好几篇博客才找到答案 >_< 1 四种mode的组成单元 这四种mode是由时钟极性和时钟…

Leetcode刷题之反转链表Ⅱ

业精于勤而荒于嬉&#xff0c;行成于思而毁于随。 ——韩愈目录 前言&#xff1a; &#x1f341;一.反转链表Ⅱ &#x1f352;1.left和right中间链表反转&#xff0c;再把反转链表和剩下的链接起来 &#x1f5fc;2.left和right中间链表头插 题目描述…

「实验记录」MIT 6.824 Raft Lab2A Leader Election

#Lab2A - Leader Election I. SourceII. My CodeIII. MotivationIV. SolutionS1 - 角色转换S2 - 发起 RequestVote 拉票请求S3 - 收到 RequestVote 的不同反应S4 - 发送 AppendEntries 心跳包S5 - 收到 AppendEntries 的不同反应S6 - defs.go约定俗成和GetState() V. Result I.…

The service already exists!

文章目录 项目场景&#xff1a;原因分析&#xff1a;解决方案&#xff1a; 项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 在给一位同学安装MySQL时报了这个错&#xff0c;我知道是她之前安装过但是没删干净的原因 但是我把Everything和注册表都查…

五、RGB实验(正点原子达芬奇Pro代码>>ZYNQ 7020代码移植)

RGB实验(正点原子达芬奇Pro代码&#xff1e;&#xff1e;ZYNQ 7020代码移植) 文章目录 RGB实验(正点原子达芬奇Pro代码&#xff1e;&#xff1e;ZYNQ 7020代码移植)前言一、本文目标二、移植步骤1.建立文件2.建立v文件1.lcd_rgb_colorbar2.lcd_driver3.rd_id4.clk_div5.lcd_dis…

单调队列算法模板及应用

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 队列算法模板例题&#xff1a;滑动窗口code 队列算法模板 // hh 表示队头&#xff0c;tt表示队尾 int q[N], hh 0…

使用Advanced Installer软件将winform程序打包成exe安装文件

在使用vs编写c#代码时&#xff0c;一般都是在debug文件中双击exe文件就可以执行&#xff0c;但是有时候需要将这个exe文件发给别人使用&#xff0c;在自己的电脑上exe文件可以执行&#xff0c;但是在别人的电脑上有时候打开后会报错&#xff0c;提示缺少.neta运行环境&#xff…

AUTUSAR通信篇 - CAN网络通信(一)

第一篇从全局角度出发&#xff0c;简单介绍了AUTOSAR的结构&#xff0c;从本篇开始我们一起详细了解一下AUTOSAR软件架构下内部的组成部分。下面&#xff0c;我们首先介绍第一个模块-通信。在AUTOSAR BSW中通信由三个部分组成&#xff0c;分别是&#xff1a;通信驱动、通信抽象…

【计算机视觉 | Pytorch】timm 包的具体介绍和图像分类案例(含源代码)

一、具体介绍 timm 是一个 PyTorch 原生实现的计算机视觉模型库。它提供了预训练模型和各种网络组件&#xff0c;可以用于各种计算机视觉任务&#xff0c;例如图像分类、物体检测、语义分割等等。 timm 的特点如下&#xff1a; PyTorch 原生实现&#xff1a;timm 的实现方式…

Java之线程池

目录 一.上节复习 1.阻塞队列 二.线程池 1.什么是线程池 2.为什么要使用线程池 3.JDK中的线程池 三.工厂模式 1.工厂模式的目的 四.使用线程池 1.submit()方法 2.模拟两个阶段任务的执行 五.自定义一个线程池 六.JDK提供线程池的详解 1.如何自定义一个线程池? 2.创…

【计网】第三章 数据链路层(3)信道划分介质访问控制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 3.5-1 信道划分介质访问控制&#xff08;播报信道中应用&#xff09;一、传输数据使用的两种链路二、介质访问控制 三、信道划分 介质访问控制&#xff08;静态划分…

协程切换原理与实践 -- 从ucontext api到x86_64汇编

目录 1.协程切换原理理解 2.ucontext实现协程切换 2.1 实现流程 2.2 根据ucontext流程看协程实现 2.3 回答开头提出的问题 3.x86_64汇编实现协程切换 3.1libco x86_64汇编代码分析 3.2.保存程序返回代码地址流程 3.3.恢复程序地址以及上下文 4.实现简单协程框架 1.协程…

《编程思维与实践》1071.猜猜猜

《编程思维与实践》1071.猜猜猜 题目 思路 对于首字符而言,如果后一位字符与之相同,则首位选法只有1种,不同则2种; 对于最后一位字符而言,如果前一位字符与之相同,则末位选法只有1种,不同则2种; 对于中间的字符而言,有以下几种可能: 1.中间字符与前后字符均不同且前后字符不同…

企业挑选人力资源管理系统,需要从哪些角度考察?

企业在挑选人力资源管理系统时&#xff0c;除了要考虑到企业自身的主要需求外&#xff0c;还应该从哪些角度考察人力资源管理系统呢&#xff1f;一起来看看吧~ 一. 数据是否共通 企业在人力资源管理系统时通常有多个功能模块的需求。除了要看系统是否具备这些功能模块&#xff…

一分钟图情论文:《数据与信息之间逻辑关系的探讨——兼及DIKW概念链模式》

一分钟图情论文&#xff1a;《数据与信息之间逻辑关系的探讨——兼及DIKW概念链模式》 1989年&#xff0c;Ackoff R L在论文&#xff1a;《From data to wisdom》中正式提出DIKW概念链模型&#xff0c;在该模型提出后的20年间&#xff0c;在计算机学科、信息管理学科、图书情报…

数据结构--线段树

写在前面&#xff1a; 学习之前需要知道以下内容&#xff1a; 1. 递归 2. 二叉树 文章目录 线段树介绍用途建树修改单点修改区间修改 查询 代码实现。建树更新lazy传递查询 练习洛谷 P3372 【模板】线段树 1题目描述题解 线段树 介绍 线段树是一种二叉树&#xff0c;也可以…

【5G RRC】5G中的服务小区和邻区测量方法

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

STL配接器(容器适配器)—— stack 的介绍使用以及模拟实现。

注意 &#xff1a; 以下所有文档都来源此网站 &#xff1a; http://cplusplus.com/ 一、stack 的介绍和使用 stack 文档的介绍&#xff1a;https://cplusplus.com/reference/stack/stack/ 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&…

Matlab进阶绘图第20期—带类别标签的三维柱状图

带类别标签的三维柱状图是一种特殊的三维柱状图。 与三维柱状图相比&#xff0c;带类别标签的三维柱状图通过颜色表示每根柱子的所属类别&#xff0c;从而可以更加直观地表示四维/四变量数据。 由于Matlab中未收录带类别标签的三维柱状图的绘制函数&#xff0c;因此需要大家自…

Java 使用 jdbc 连接 mysql

简介 Java JDBC 是 Java Database Connectivity 的缩写&#xff0c;它是一种用于连接和操作数据库的标准 API。Java JDBC 可以让 Java 程序通过 JDBC 驱动程序连接到各种不同类型的数据库&#xff0c;并且执行 SQL 语句来实现数据的读取、插入、更新、删除等操作。在本篇文章中…