Linux基础知识(十六)shell脚本编程

一、简介

  1. 用户通过shell向计算机发送指令
  2. 计算机通过shell给用户返回指令的执行结果

1.1 通过shell编程可以达到的效果

  • 提高工作效率
  • 可以实现自动化

1.2 需要学习的内容

  • Linux
  • shell的语法规范

1.3 编写shell的流程

  • 第一步:用vi/vim创建一个.sh的文件
  • 第二步:在文件中进行开发
  • 第三步:给文件赋予可执行权限
  • 第四步:执行脚本

二、变量

2.1 变量分类

  • 本地变量
  • 局部变量
  • 环境变量
  • 位置变量
  • 特殊变量

2.2 本地变量

  • 定义变量:Var_Name="Value"  变量名=变量值
  • 引用变量:${Var_Name}  [{}可以省略不写]
  • 撤销变量:unset Var_Name

本地变量适合在终端使用,新开一个终端或关闭后就会消失

例:

本地变量在哪里都可以用,文件和终端不在一个环境内

2.3 局部变量

定义:local Var_Name="Value"

  • 局部变量只在函数内部生效

例:

a{name=张三echo
}
b{name=李四echo
}

只在内部有效,出了花括号没用

2.4 环境变量

  • 定义:expot Var_Name="Value"   【最好不要自己随便定义,环境变量都是大写的】
  • set命令可以显示当前系统上的所有变量
  • export、env命令可以显示环境变量

常用的环境变量

  • PS1                       #命令提示符
  • HOSTNAME         #存放主机名的
  • LANG                   #语言
  • ...

2.5 位置变量

主要用于橡胶板中传递参数

表示方法:$1,$2,$3,..$n

例:    ./1.sh 1 5 9 (传入的参数)

2.6 特殊变量

  • $0         #脚本自身的名称
  • $?         #上个命令的执行状态
  • $#         #参数列表

2.7 变量命名要求:

  • 只能使用数字、字母和组成
  • 不能以数字开头
  • 不能使用程序中的关键字

2.8 变量名的默认规则:

  • 见名知意
  • 自定义变量小写
  • 环境变量大写

三、重定向

3.1 什么是重定向?

重定向就是修改指令发送给计算机的途径,计算机将指令执行结果返回给用户的途径

3.2 重定向的分类

  • 输出重定向
  • 标准输出重定向
  • 错误输出重定向
3.2.1 输入
  • 标准输入:键盘
  • 输入重定向:<
3.2.2 输出
  • 标准输出:终端
  • 标准错误输出:终端
  • 标准输出重定向:>     >>
  • 标准错误输出重定向:2>     2>>

将结果保存到文件、屏蔽输出结果

3.3 特殊文件

  • /dev/null
  • /dev/zero

dd if=/dev/zero of=zeros.bin bs=1G count=100000   

 #读0,用来测试的,不显示内容但会占用内存

3.4 管道符

  • |
  • 仅仅用于传递命令的执行结果给另一个命令

四、bash条件判断基础

4.1 判断的作用:

  • 判断后续操作的前提条件是否满足
  • 如果满足执行一种指令,不满足则执行另一种指令

4.2 条件测试类型

  • 整型测试
  • 字符测试
  • 文件测试

4.3 逻辑运算

4.3.1 与运算   &&
  • 真&&真=真
  • 真&&假=假
  • 假&&假=假
  • 假&&真=假
4.3.2 或运算   ||
  • 真||真=真
  • 真||假=真
  • 假||真=真
  • 假||假=假
4.3.3 非运算   !
  • !真=假
  • !假=真

4.4 操作符

  • -gt         大于
  • -lt          小于
  • -ge        大于等于
  • -le         小于等于
  • -ne        不等于
  • -eq        等于

4.5 判断方式

test EXPRESSION

  例:test 3 -gt 4

[EXPRSSION]

例: [ 3 -gt 4 ]

[[ EXPRESSION ]]

例:[[ 2 -gt 1 ]]

用命令执行状态来作为判断条件

查看脚本的执行过程:

bash -x 脚本名

4.6 bash 条件判断语法格式

if判断的三种格式

4.6.1 单分支
if 条件;then分支1
fi
4.6.2 双分支
if 条件;then分支1
else分支2
fi
4.6.3 多分支
if 条件;then分支1
elif分支2
elif 分支3
...
else分支
fi

例:成绩大于90,则输出成绩A;成绩大于80,则输出成绩B;成绩大于70,则输出成绩C;成绩大于60,则输出成绩D;0分以上则输出E

例:让用户指定一个文件,判断如果有空白行,就显示空白行数,没有则提示"no"

4.7 整型测试方法:

整型测试通常都是二元测试

格式是:num1 oprand num2

4.8 用户和脚本进行交互

位置变量

read命令

read -p "参数" 变量名

例:

read -p "请输入第一个数字:" num

例题:

让用户通过键盘输入一个用户,如果用户存在就显示其用户的用户名和uid,否则就显示用户不存在

4.9 字符测试法

双目测试

比较两个字符串

  • ==   等于,等值比较
  • !=    不等于
  • =~    匹配是否在范围

单目测试

  • -n $stringVar:字符串是否为空,不空为真,空则假
  • -z $stringVar:字符串是否为空,空则为真,不空为假

 例:

  • -a:用于逻辑与的操作
  • -e:检查文件是否存在

例:

  • -f:检查文件是否为普通文件

  • -d:检查文件是否为目录文件

  • -r:检查文件是否可读

  • -w:检查文件是否可写

  • -x:检查文件是否可执行

例:让用户输入一个用户名,先判定用户是否存在,不存在以7为退出码;

判断用户的shell是否为/bin/bash,如果是则显示"bash user",退出码为0,否则则显示为"not bash user" 退出码为1

  • -b:判断是否存在且是一个块特殊文件

例:1.显示如下菜单

cpu)    show cpu info;

mem) sowmemory info;

quit)   quit

请输入你的选择:

2.如果用户选择了cpu则显示文件/proc/cpuinfo的信息;

3..如果用户选择了mem则显示文件/proc/meminfo的信息;

4.如果用户选择了quit则退出且状态码为5;

5.如果用户输入其他其他字符,则显示未知选项请重新执行脚本,退出码为6;

4.10 位置参数轮替

#!/bin/bash
echo "参数列表:$#"
echo "参数列表:$@"
echo " "
shift 2
echo "参数列表:$#"
echo "参数列表:$@"
echo " "
shift 2
echo "参数列表:$#"
echo "参数列表:$@"

说明:shift在这里就是起到了一个轮替的作用,2表示一次轮替2个参数

在下一次echo的时候,参数会从轮替后的数字开始计算

例:使用形式如下:username u username[v{1|2}]

-u选项用于指定用户名;脚本显示用户的uid,gid

如果同时使用-v选项,v后面值是1,显示用户的家目录

v后面的值是2,显示用户的家目录和shell类型

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

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

相关文章

位运算在数据库中的运用实践-以MySQL和PG为例

目录 前言 一、两种不同的数据库设计 1、状态字段存储JSON 2、使用位运算 二、数据库中的位运算实践 1、MySQL中的位运算实践 2、PostgreSQL中位运算实践 三、总结 前言 最近在解决某用户的一个业务需求时&#xff0c;遇到一个很有意思的场景。首先先跟大家分享一下需求…

飞腾平台虚拟机组播性能调优指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

STM32G4 DMA的使用(寄存器开发)

下面以STM32G474为例&#xff0c;使用DMA来存储USART1的接收数据。 1. 查看硬件支持 首先查看要使用的DMA支持的通道数&#xff0c;在手册中有如下说明。 根据上图可以看到&#xff0c;对于不同的设备类型有不同的DMA通道数量。设备类型分类如下图所示。 我使用的是STM32G474…

基于 TI AM62 测试 QtWayland 部署

By Toradex秦海 1). 简介 目前主流的 ARM 平台嵌入式 Linux BSP 的显示后端基本都已经从 X11 升级到了 Wayland&#xff0c; 而常用的 Wayland Compositor - Weston 对于 Linux 下常用的 Qt 图形界面开发框架的一些 Plugin (比如 Qt VirtualKeyboard) 的配合并不完善&#xf…

什么是边缘计算?创造一个更快、更智慧、更互联的世界

前言 如今&#xff0c;数十亿物联网传感器广泛部署在零售商店、城市街道、仓库和医院等各种场所&#xff0c;正在生成大量数据。从这些数据中更快地获得洞察&#xff0c;意味着可以改善服务、简化运营&#xff0c;甚至挽救生命。但要做到这一点&#xff0c;企业需要实时做出决策…

tableau标靶图,甘特图与瀑布图绘制 - 9

标靶图&#xff0c;甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…

【pytorch20】多分类问题

网络结构以及示例 该网络的输出不是一层或两层的&#xff0c;而是一个十层的代表有十分类 新建三个线性层&#xff0c;每个线性层都有w和b的tensor 首先输入维度是784&#xff0c;第一个维度是ch_out,第二个维度才是ch_in(由于后面要转置)&#xff0c;没有经过softmax函数和…

【利用GroundingDINO裁剪分类任务的数据集】及文本提示检测图像任意目标(Grounding DINO) 的使用

文章目录 背景1.Grounding DINO安装2.裁剪指定目标的脚本 背景 在处理公开数据集ImageNet-21k的时候发现里面有很多的数据有问题&#xff0c;比如&#xff0c;数据目标有很多背景&#xff0c;且部分类别有其他种类的图片。针对数据目标有很多背景&#xff0c;公开数据集ImageNe…

【数据库】Redis主从复制、哨兵模式、集群

目录 一、Redis的主从复制 1.1 主从复制的架构 1.2 主从复制的作用 1.3 注意事项 1.4 主从复制用到的命令 1.5 主从复制流程 1.6 主从复制实现 1.7 结束主从复制 1.8 主从复制优化配置 二、哨兵模式 2.1 哨兵模式原理 2.2 哨兵的三个定时任务 2.3 哨兵的结构 2.4 哨…

ArkUI开发学习随机——B站视频简介页面,美团购买界面

案例一&#xff1a;B站视频简介页面 代码&#xff1a; build() {Column(){Column(){Stack(){Image($r("app.media.genimpact")).width(200).height(125).borderRadius({topLeft:5,topRight:5})Row(){Image($r("app.media.bz_play")).height(24).fillColor…

【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

​​​​​​​ 目录 一、引言 二、pipeline库 2.1 概述 2.2 使用task实例化pipeline对象 2.2.1 基于task实例化“自动语音识别” 2.2.2 task列表 2.2.3 task默认模型 2.3 使用model实例化pipeline对象 2.3.1 基于model实例化“自动语音识别” 2.3.2 查看model与task…

IEC62056标准体系简介-4.IEC62056-53 COSEM应用层

为在通信介质中传输COSEM对象模型&#xff0c;IEC62056参照OSI参考模型&#xff0c;制定了简化的三层通信模型&#xff0c;包括应用层、数据链路层&#xff08;或中间协议层&#xff09;和物理层&#xff0c;如图6所示。COSEM应用层完成对COSEM对象的属性和方法的访问&#xff…

01MFC建立单个文件类型——画线

文章目录 选择模式初始化文件作用解析各初始化文件解析类导向创建鼠标按键按下抬起操作函数添加一个变量记录起始位置注意事项代码实现效果图虚实/颜色线选择模式 初始化文件作用解析 运行: 各初始化文件解析 MFC(Microsoft Foundation Classes)是一个C++类库,用于在Win…

防御课综合实验

实验拓扑&#xff1a; 实验要求&#xff1a; 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9点到18点&#xff09;可以访问&#xff0c;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10…

二叉平衡树(左单旋,右单旋,左右双旋、右左双旋)

一、AVL树&#xff08;二叉平衡树&#xff1a;高度平衡的二叉搜索树&#xff09; 0、二叉平衡树 左右子树高度差不超过1的二叉搜索树。 public class AVLTree{static class AVLTreeNode {public TreeNode left null; // 节点的左孩子public TreeNode right null; // 节点的…

基于Transformer的端到端的目标检测 | 读论文

本文正在参加 人工智能创作者扶持计划 提及到计算机视觉的目标检测&#xff0c;我们一般会最先想到卷积神经网络&#xff08;CNN&#xff09;&#xff0c;因为这算是目标检测领域的开山之作了&#xff0c;在很长的一段时间里人们都折服于卷积神经网络在图像处理领域的优势&…

论文 | REACT: SYNERGIZING REASONING AND ACTING INLANGUAGE MODELS

本文首先认为&#xff0c;到目前为止&#xff0c;LLM 在语言理解方面令人印象深刻&#xff0c;它们已被用来生成 CoT&#xff08;思想链&#xff09;来解决一些问题&#xff0c;它们也被用于执行和计划生成。 尽管这两者是分开研究的&#xff0c;但本文旨在以交错的方式将推理…

JSP入门基础

JSP入门基础 软件开发环境这门课程的复习资料 Web开发技术概述 URL的组成部分 协议、主机DNS名或IP地址和文件名 Tomcat服务器 Tomcat服务器的默认端口号是8080 概念 软件开发环境是围绕着软件开发的一定目标而组织在一起的一组相关软件工具的有机集合 JSP和HTML的区别…

SPE连接器技术革新汽车制造业

概述 新的SPE标准在汽车制造业中的应用正日益受到重视&#xff0c;它不仅推动了汽车通信技术的革新&#xff0c;还对汽车性能测试方法产生了深远影响。本文将详细探讨SPE标准在汽车制造业中的应用案例分析&#xff0c;以及它对供应链的挑战与机遇。 SPE标准在汽车制造业中的应…

[leetcode]subarray-product-less-than-k 乘积小于K的子数组

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int numSubarrayProductLessThanK(vector<int>& nums, int k) {if (k 0) {return 0;}int n nums.size();vector<double> logPrefix(n 1);for (int i 0; i < n; i) {logPrefix[i 1] …