linux的学习(五):shell编程中的变量,运算符,条件判断

news2024/9/23 23:28:19

简介:

shell编程的基本概念,定义变量,运算符,条件判断的基本使用

shell编程

把多个命令写到一个文件里,这个文件就是脚本,里面还有很多的流程控制

基本概念

脚本的后缀名是.sh
脚本的执行:

  • sh+脚本的路径,bash+脚本的路径
  • 直接脚本的路径,但是需要权限
  • 文件名前面加.(点,后面加空格)或者source

简单例子

创建sh文件
touch c.sh

在这里插入图片描述

编辑文件

使用vim打开文件

vim c.sh
编辑内容:
#! /bin/bash
echo "hello world" 

注意,sh文件开头第一句都是#!/bin/sh:默认选择的命令行解析器

执行sh文件:

第一种方式:

bash c.sh

在这里插入图片描述
第二种方式:

./c.sh

在这里插入图片描述
如果直接打文件名,是不行的,要加上绝对路径或者相对路径才行
而且需要有文件的执行权限,如果提示权限不足,需要修改文件的权限。

chmod +x c.sh

注意:第一种和第二种执行sh脚本文件是会开启一个子shell来执行的,有可能会不能对父shell起作用
第三种执行方式是直接在当前的shell中执行的
开不开子shell,区别是:环境变量的继承关系,如果在子shell中设置当前变量,父shell中是不可见的。

变量

变量根据定义分为:系统变量和用户自定义变量
根据作用范围分为:全局变量和局部变量,全局是所有的shell起效,局部是只针对当前shell起效
**扩展:**当前shell可以使用ps -f查看
在这里插入图片描述
开启一个子shell,bash,然后再执行ps -f,可以看到这个bash的PPID就是第一个bash的线程id
关于怎么知道当前的shell是哪个shell,可以看命令的PPID是哪个shell的进程号

在这里插入图片描述
可以使用exit退出当前的bash,回到上一级的bash(父bash)

查看全部的系统全局变量
env | less

也可以直接输出,echo $HOME

在这里插入图片描述

自定义变量

直接变量名=值,回车,不能有空格
在这里插入图片描述
更改也是直接变量名=值,回车,不用管值的类型的,默认都是string类型。
在这里插入图片描述
注意

  • 如果值是一个字符型,可以加引号
  • 这种直接赋值创建的是局部变量
把局部变量变成全局变量

export 变量名
但是使用这个命令,让子shell的局部变量变成了全局变量,虽然父shell可以访问到,但是在子shell中修改了这个变量的值,在父shell中,虽然还是可以访问到,但访问到的值不是修改后的值。

只读变量

只能读,不能修改,也就是不能重新赋值

readonly b=3
撤销变量

unset 变量名
这个命令不能撤销只读变量

特殊变量
${数字}

可以给脚本传递参数,写在脚本中,${0}是脚本的名称,所以传参使用的事1开始的。
vim d.sh编辑脚本

#! /bin/bash
echo "hello world" 
echo "hello, ${1}"

运行脚本的时候,传入参数
在这里插入图片描述

$#

获取输入参数的个数
可以用在循环或者是参数的判断
编辑脚本

#! /bin/bash
echo "--------------------特殊变量#-------------------"
echo $#

运行脚本
在这里插入图片描述
这个1就表示输入了一个参数

$*和 $@

$*:表示命令行中所有的参数
$@:表示命令行中所有的参数
功能类似,区别在于 $ * 获得的参数是当成一个整体(相当于字符),@获得的参数是当成多个(相当于数组)。

$?

最后一次执行的命令的返回状态,0表示执行正常,非0表示错误。
它是直接在命令行使用的
在这里插入图片描述

运算符

定义的变量的值如果想做运算,可以使用$((运算式))或者 $[运算式]
在这里插入图片描述

脚本中计算

vim编辑add.sh脚本

#!/bin/sh
#!/bin/sh
sum=$[$1+$2]
echo sum=$sum

运行add.sh脚本

. add.sh 3 3

运行结果
在这里插入图片描述

流程控制

条件判断

第一种方式:test $a = 3
第二种方式:[ $a = 3 ]
然后使用echo $?,如果返回值为0,则相等,返回值为1,则不相等。

注意:[ $a = 3 ],表达式前后都要有空格,等号两边也是要空格的,如果等号两边没有空格,会识别为一个变量名,如果里面随便输入值,也会判断为0,只有[]里面没有值的时候,才会判断为1。在这里插入图片描述

常用的判断条件

整数的判断:

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

字符使用 = 判断相等,!= 判断不等

[ $a -lt 5 ]判断变量a是否小于5
在这里插入图片描述

文件权限的判断:

-r有读的权限
-w有写的权限
-x有执行的权限

在这里插入图片描述
[ -x add.sh ]判断add.sh有没有读和执行的权限(上图中可以看到有读没有执行)
在这里插入图片描述
对文件类型进行判断

-e文件是否存在
-f文件是否存在并且是否是一个普通文件
-d文件是否存在并且是否是一个目录

[ -d add.sh ] 判断add.sh是否是一个目录
在这里插入图片描述
多条件判断:
&&:前一条命令成功,才执行后面的命令
||:前一条命令失败,才执行后面的命令
例子:

 [ abcabc ] && echo "yes" || echo "no"
 [ ] && echo "yes" || echo "no"

运行结果:
在这里插入图片描述

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

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

相关文章

全面理解Spring6框架到熟悉与掌握

个人笔记梳理,仅供参考 Spring是一款主流的JavaEE轻量级开源框架 Spring的狭义和广义 广义的Spring:Spring技术栈 泛指以Spring Framework为核心的Spring技术栈 经过十多年的发展,Spring已经不再是一个单纯的应用框架,而是逐…

EasyAnimate-v3版本支持I2V及超长视频生成

阿里云人工智能平台(PAI)自研开源的视频生成项目EasyAnimate正式发布v3版本: 支持 图片(可配合文字) 生成视频 支持 上传两张图片作为起止画面 生成视频 最大支持720p(960*960分辨率) 144帧视…

量化投资基础(一)之均值方差模型一

点赞、关注,养成良好习惯 Life is short, U need Python 量化投资基础系列,不断更新中 1. 投资组合收益率与风险 假设市场有 N N N 个资产,其随机收益率分别为 R 1 , R 2 , … , R N R_1,R_2,\dots,R_N R1​,R2​,…,RN​ ,对应…

蓝桥 双周赛算法赛【小白场】

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 蓝桥第14场小白入门赛T1/T2/T3 题目: T1照常还是送分题无需多…

【Git的基本操作】版本回退 | 撤销修改的三种情况 | 删除文件

目录 5.版本回退 5.1选项hard&后悔药 5.2后悔药&commit id 5.3版本回退的原理 6.撤销修改 6.1情况一 6.2情况二 6.3情况三 ​7.删除文件 Git重要能力之一马,版本回退功能。Git是版本控制系统,能够管理文件历史版本。本篇以ReadMe文件为…

STM32智能楼宇照明系统教程

目录 引言环境准备智能楼宇照明系统基础代码实现:实现智能楼宇照明系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:楼宇照明管理与优化问题解决方案与优化收尾与总结 1. 引言 智能楼宇照明系…

Vue3新特性:Teleport、Suspense玩转起来!

Vue3新特性:Teleport、Suspense玩转起来! 嘿,各位前端小伙伴们!今天咱们来聊聊Vue3中的两个新特性:Teleport和Suspense。这两个功能听起来像是从科幻电影里跑出来的,但实际上它们可是能让我们的代码更加优…

Leetcode - 周赛405

目录 一,3210. 找出加密后的字符串 二,3211. 生成不含相邻零的二进制字符串 三,3212. 统计 X 和 Y 频数相等的子矩阵数量 一,3210. 找出加密后的字符串 本题是一道模拟题,代码如下: class Solution {pu…

力扣27.移除元素(Java)

思路&#xff1a; 使用双指针&#xff0c;其中一个指针用来寻找不同val的下标&#xff0c;另一个指针用来赋值 class Solution {public int removeElement(int[] nums, int val) {int left0;//用来赋值的指针for(int right0;right<nums.length;right){//用来寻找不同与val…

[Linux]Linux编译器gcc/g++

首先我们需要明确概念gcc只能用来编译c语言&#xff0c;g即可用来编译c语言&#xff0c;又可用来编译c,但我们一般用gcc编译c,g编译c 一、gcc的使用 当我们写好代码以后可以直接 gcc test.c然后它会自动生成一个可执行程序a.out这个可执行程序的名字不重要&#xff0c;关键是…

醇香之旅:探索红酒的无穷魅力

在浩渺的饮品世界里&#xff0c;红酒如同一颗璀璨的星辰&#xff0c;闪烁着诱人的光芒。它以其不同的醇香和深邃的韵味&#xff0c;吸引着无数人的目光。今天&#xff0c;就让我们一起踏上这场醇香之旅&#xff0c;探索雷盛红酒所带来的无穷魅力。 一、初识红酒的醇香 当我们…

vue3前端页面下载excel模版

1.excel上传到public目录下 2.代码中引用excel路径 <el-space direction"horizontal" size"small"><el-button click"handleChangePage">刷新列表</el-button><el-button type"primary" click"handleBatch…

【第2章】Spring Cloud之Nacos服务端安装

文章目录 前言一、预备环境准备二、下载源码或者安装包1. 从 Github 上下载源码方式2.下载编译后压缩包方式(推荐)3. 目录结构4. 启动服务器5. 访问控制台6. 关闭服务器 总结 前言 Nacos 通过提供简单易用的动态服务发现、服务配置、服务共享与管理等服务基础设施&#xff0c;…

[日进斗金系列]用码上飞解决企微开发维修管理系统的需求

前言&#xff1a; 今天跟大家唠唠如何用小money生 大money的方法&#xff0c;首先我们需要准备一个工具。 这个工具叫码上飞CodeFlying&#xff0c;它是目前国内首发的L4级自动化智能软件开发平台。 它可以在短时间内&#xff0c;与AI进行几轮对话就能开发出一个可以解决实际…

【React打卡学习第一天】

React入门 一、简介二、基本使用1.引入相关js库2.babel.js的作用 二、创建虚拟DOM三、JSX&#xff08;JavaScript XML&#xff09;1.本质2.作用3.基本语法规则定义虚拟DOM时&#xff0c;不要写引号。标签中混入JS表达式时要用{}。样式的类名指定不要用class,要用className.内联…

发现一个巨牛的国产GPT,确定不来体验一下?

ChatGAI 这个网站融合了多种实用功能&#xff0c;包括聊天问答、PPT生成、笔记整理、图文创作和视频生成等&#xff0c;能满足媒体从业者的多元需求。用户无需注册即可体验&#xff0c;界面友好&#xff0c;操作便捷&#xff0c;分享给兄弟们使用。 链接&#xff1a;ChatGAI …

昇思25天学习打卡营第13天|munger85

文本解码原理–以MindNLP为例 重要的就是怎么样把数字最后转化成真正的文字。而且自回归模型它会一个字给一个字的预测&#xff0c;下一个字应该是什么&#xff1f; 如果这个模型下载很慢&#xff0c;你就可以通过这种方式从摩大社区进行下载。 这种方式&#xff0c; 每一次候…

LeetCode 142.环形链表2 C写法

LeetCOde 142.环形链表2 C写法 思路1&#x1f914;&#xff1a; ​ 用环形链表的方法&#xff0c;快慢指针找到slow和fast的相遇点&#xff0c;此时头到入口点的位置与相遇点到入口点的距离一样。 ​ 我们假设头到入口点的长度为L&#xff0c;环的长度为C&#xff0c;相遇点到入…

ArgMed-Agents:通过多个智能体论证方案增强大模型,进行可解释的临床决策推理

ArgMed-Agents&#xff1a;通过多个智能体论证方案增强大模型&#xff0c;进行可解释的临床决策推理 提出背景ArgMed-Agents 框架目的解法拆解逻辑链 临床讨论的论证方案&#xff08;ASCD&#xff09;论证方案用于决策&#xff08;ASDM&#xff09;论证方案用于副作用&#xff…

算法力扣刷题记录 四十八【513.找树左下角的值】

前言 二叉树篇继续。 记录 四十八【513.找树左下角的值】 一、题目阅读 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,nul…